使用URLSessionDownloadDelegate获取HTTP标头

时间:2016-11-23 13:07:57

标签: swift nsurlsession

如何从服务器获取标头,检查状态代码是200404等?

我有一个委托类:

class DownloadDelegate : NSObject, URLSessionDelegate, URLSessionDownloadDelegate, URLSessionTaskDelegate {
    // Implementations of delegate methods:
    [...]didFinishDownloadingTo location: URL[...]
    [...]didWriteData bytesWritten: Int64, totalBytesWritten: Int64, totalBytesExpectedToWrite: Int64[...]
}

但我不确定在哪里可以提取标题。

1 个答案:

答案 0 :(得分:5)

urlSession(_:downloadTask:didFinishDownloadingTo:)为您提供标题。

参数downloadTask的属性.response类型为URLResponse

假设您使用的是HTTP / HTTPS,可以将其投放到HTTPURLResponse

  

每当您发出HTTP请求时,您获得的NSURLResponse对象实际上是HTTPURLResponse类的实例。

     

来源:URLResponse的API参考

HTTPURLResponse具有获取状态代码(statusCode)和所有标题字段为[AnyHashable: Any]allHeaderFields)的属性。

实施例

func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask, didFinishDownloadingTo location: URL) {
    guard let response = downloadTask.response as? HTTPURLResponse else {
        return //something went wrong
    }

    let status = response.statusCode
    let completeHeader = response.allHeaderFields
}