使用带有非安全URL的URLSession的Swift 4

时间:2018-04-06 12:47:02

标签: swift xcode urlsession

我正在尝试将数据发送到使用HTTP而非HTTPS的WebAPI服务,但是我收到以下错误:

“主题1:致命错误:在解包可选值时意外发现nil”

这是我的代码:

func logSample(emailSKU:String) -> String {
    //let myAPI = "https://itunes.apple.com/us/rss/topmovies/limit=25/json"
    let myAPI = "http://<myURlHere>/api/xxx"
    let url = URL(string: myAPI)
    let session = URLSession.shared.dataTask(with: (url)!) { (data, response, error) in   <====== Breaks on this line

    print("Response was:")
    print(response)
 }
    session.resume()
    return "return something here"
}

API服务可以很好地从其他应用程序中运行。 如果我使用上面的iTunes网址,那么一切正常,所以唯一的区别是HTTP ver HTTPS。

我已经向plist添加了“允许任意载入”声明,任何想法?

2 个答案:

答案 0 :(得分:1)

我检查了RFC 3986,它是&#34; |&#34;不允许的字符,您需要编码。

答案 1 :(得分:0)

补充@Joakims答案:

由于使用了|,因此给出的URL无效字符和需要编码。您可以通过以下方式执行此操作:

let urlString = "http://example.com/api/Scans?emailSKU=fred@example.com|123456"
if let encodedURLString = urlString.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) {

    let url = URL(string: encodedURLString)
    print(url)
}

哪个输出:

  

可选(http://example.com/api/Scans?emailSKU=fred@example.com%7C123456

因此需要对|进行编码,并将其替换为%7C