NSURLSession 3xx重定向和完成处理程序

Pop*_*nel 3 macos foundation ios nsurlsession swift

我有一个dataTask + completionHandler方法从Web服务器下载数据.到目前为止,我实现了这个:

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])
Run Code Online (Sandbox Code Playgroud)

我想知道如果statusCode是3xx错误会发生什么?pageData是否包含重定向位置的数据?换句话说,我应该补充一下

case _ where code >= 300 && code < 400:
    self.fetchedPages.updateValue(pageData, forKey: pageNumber)
Run Code Online (Sandbox Code Playgroud)

或者是否会使用包含重定向位置的值的pageData和新的200状态代码再次调用处理程序?或者是正确处理重定向的东西我只能使用委托吗?

jat*_*ben 5

如果您没有委托或委托未实现URLSession(_:task:willPerformHTTPRedirection:newRequest:completionHandler:),将自动遵循HTTP重定向.在这种情况下,您将不会在处理程序中看到30x状态.