NSURLSession 3xx 重定向和完成处理程序
NSURLSession 3xx redirects and completion handlers
我有一个 dataTask + completionHandler 方法来从网络服务器下载数据。到目前为止,我已经实现了这个:
let task = session.dataTaskWithURL(url, completionHandler: {
(pageData,response,error) in
...
...
let code = urlHttpResponse.statusCode
switch code {
case 200:
self.fetchedPages.updateValue(pageData, forKey: pageNumber)
case 404:
self.fetchedPages.updateValue(nil, forKey: pageNumber) //No data exists for that page
default:
self.fetchedPages.updateValue(nil, forKey: pageNumber) //No gurantee data exists for that page
}
NSNotificationCenter.defaultCenter().postNotificationName("pageDataDownloaded", object: self, userInfo: ["numberForDownloadedPage":pageNumber])
我想知道如果 statusCode 是 3xx 错误会发生什么? pageData 是否会包含重定向位置的数据?换句话说,我应该添加
case _ where code >= 300 && code < 400:
self.fetchedPages.updateValue(pageData, forKey: pageNumber)
或者是否会使用包含重定向位置的值和新的 200 状态代码的 pageData 再次调用处理程序?还是我只能使用委托来正确处理重定向?
如果您没有委托或委托未实现 URLSession(_:task:willPerformHTTPRedirection:newRequest:completionHandler:)
,将自动遵循 HTTP 重定向。在这种情况下,您将不会在处理程序中看到 30x 状态。
我有一个 dataTask + completionHandler 方法来从网络服务器下载数据。到目前为止,我已经实现了这个:
let task = session.dataTaskWithURL(url, completionHandler: {
(pageData,response,error) in
...
...
let code = urlHttpResponse.statusCode
switch code {
case 200:
self.fetchedPages.updateValue(pageData, forKey: pageNumber)
case 404:
self.fetchedPages.updateValue(nil, forKey: pageNumber) //No data exists for that page
default:
self.fetchedPages.updateValue(nil, forKey: pageNumber) //No gurantee data exists for that page
}
NSNotificationCenter.defaultCenter().postNotificationName("pageDataDownloaded", object: self, userInfo: ["numberForDownloadedPage":pageNumber])
我想知道如果 statusCode 是 3xx 错误会发生什么? pageData 是否会包含重定向位置的数据?换句话说,我应该添加
case _ where code >= 300 && code < 400:
self.fetchedPages.updateValue(pageData, forKey: pageNumber)
或者是否会使用包含重定向位置的值和新的 200 状态代码的 pageData 再次调用处理程序?还是我只能使用委托来正确处理重定向?
如果您没有委托或委托未实现 URLSession(_:task:willPerformHTTPRedirection:newRequest:completionHandler:)
,将自动遵循 HTTP 重定向。在这种情况下,您将不会在处理程序中看到 30x 状态。