我正在尝试将数据发送到使用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添加了“允许任意载入”声明,任何想法?
答案 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