URLSession 响应不包含来自上次重定向的 headers
URLSession Response doesn't contain headers from last redirect
我有一个 URL,当我在网络浏览器中调用它时,它会重定向我 2 次,在第二次重定向的响应 header 中,它将发送我想要提取的信息.
所以为了在 swift 中自动提取该信息,我编写了这段发出 HTTP 请求然后打印响应的短代码 headers:
printv(text: "Loading JSID Location")
req = URLRequest.init(url: JSIDLocation!)
var task : URLSessionDataTask
task = URLSession.shared.dataTask(with: req) {(data, response, error) in
if let res = response as? HTTPURLResponse {
res.allHeaderFields.forEach { (arg0) in
let (key, value) = arg0
self.printv(text: "\(key): \(value)")
}
}
self.printv(text: String.init(data: data!, encoding: String.Encoding.utf8)!)
}
task.resume()
(printv
是一个将格式化字符串并将其打印到标签的函数)
所以当我 运行 这个时,我希望它打印响应 headers 和最后一次重定向的 body,但实际发生的是我只是打印响应原URL的headers和body。由于那些不包含我正在寻找的信息,所以这对我没有帮助。我已经用谷歌搜索了我的问题,我发现默认情况下 HTTP 重定向在 URLSessions
中激活,您必须弄乱 URLSessionDelegates
才能停用它们,但这绝对不是我所做的。
感谢您的帮助!
如果你想要重定向信息,你需要成为URLSessionDataTaskDelegate
。
let session = URLSession(configuration: .default, delegate: self, delegateQueue: nil)
然后您需要实现重定向委托函数,并确保使用给定的新重定向请求调用完成处理程序:
func urlSession(_ session: URLSession, task: URLSessionTask, willPerformHTTPRedirection response: HTTPURLResponse, newRequest request: URLRequest, completionHandler: @escaping (URLRequest?) -> Void) {
// operate on response to learn about the headers here
completionHandler(request)
}
我有一个 URL,当我在网络浏览器中调用它时,它会重定向我 2 次,在第二次重定向的响应 header 中,它将发送我想要提取的信息.
所以为了在 swift 中自动提取该信息,我编写了这段发出 HTTP 请求然后打印响应的短代码 headers:
printv(text: "Loading JSID Location")
req = URLRequest.init(url: JSIDLocation!)
var task : URLSessionDataTask
task = URLSession.shared.dataTask(with: req) {(data, response, error) in
if let res = response as? HTTPURLResponse {
res.allHeaderFields.forEach { (arg0) in
let (key, value) = arg0
self.printv(text: "\(key): \(value)")
}
}
self.printv(text: String.init(data: data!, encoding: String.Encoding.utf8)!)
}
task.resume()
(printv
是一个将格式化字符串并将其打印到标签的函数)
所以当我 运行 这个时,我希望它打印响应 headers 和最后一次重定向的 body,但实际发生的是我只是打印响应原URL的headers和body。由于那些不包含我正在寻找的信息,所以这对我没有帮助。我已经用谷歌搜索了我的问题,我发现默认情况下 HTTP 重定向在 URLSessions
中激活,您必须弄乱 URLSessionDelegates
才能停用它们,但这绝对不是我所做的。
感谢您的帮助!
如果你想要重定向信息,你需要成为URLSessionDataTaskDelegate
。
let session = URLSession(configuration: .default, delegate: self, delegateQueue: nil)
然后您需要实现重定向委托函数,并确保使用给定的新重定向请求调用完成处理程序:
func urlSession(_ session: URLSession, task: URLSessionTask, willPerformHTTPRedirection response: HTTPURLResponse, newRequest request: URLRequest, completionHandler: @escaping (URLRequest?) -> Void) {
// operate on response to learn about the headers here
completionHandler(request)
}