我在我的iOS项目(Swift 4)中使用URLSession
。
var postRequest = URLRequest(url: myUrl)
request.httpMethod = "POST"
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
let dataTask = defaultSession.dataTask(with: postRequest) { data, response, error in
if let error = error {
// Sometimes I get error here
showError(error.localizedDescription)
} else if let data = data,
let response = response as? HTTPURLResponse,
response.statusCode == 200 {
// most of the time, everything is fine
...
}
dataTask?.resume()
当我运行代码与服务器对话时,通常没有问题,一切都按预期进行。但是有时我会得到非零的error
,localizedDescription
说There was an error processing your request
。
我不确定如何解决此问题,因为我没有获得更多的调试信息,而且这只是随机发生的。
有人可以指出我正确的方向吗?使用URLSession
与服务器通话时会导致此错误的原因是什么?
答案 0 :(得分:0)
这是服务器端错误-可能是500或502,但可能有任何错误。如果打印错误代码,您可能会了解更多。
此外,默认情况下,NSURLSession在返回错误代码时会断开连接,但是可以告诉它获取错误页面数据(其中可能包含有关错误原因的更多信息)。
为此,请将委托方法添加到会话的委托中,例如
- (void)URLSession:(NSURLSession *)session
dataTask:(NSURLSessionDataTask *)dataTask
didReceiveResponse:(NSURLResponse *)response
completionHandler:(void (^)(NSURLSessionResponseDisposition
disposition))completionHandler {
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)httpResponse;
// For server errors or success status, fetch the response body, else cancel.
if (httpResponse.statusCode >= 500 && httpResponse.statusCode <= 599) {
completionHandler(NSURLSessionResponseAllow);
} else if (httpRepose.statusCode == 200) {
completionHandler(NSURLSessionResponseAllow);
} else {
completionHandler(NSURLSessionResponseCancel);
}
}
当然,您还必须创建并保留一个会话(因为默认会话没有委托)。