gpt4 book ai didi

swift - URLSession 响应不包含上次重定向的 header

转载 作者:行者123 更新时间:2023-11-30 10:35:34 25 4
gpt4 key购买 nike

我有一个 URL,当在网络浏览器中调用时,它将重定向我两次,并在第二次重定向的响应 header 中发送我想要提取的信息。

因此,为了快速自动提取该信息,我编写了这段简短的代码来发出 HTTP 请求,然后打印响应 header :

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 是一个函数,它将格式化字符串并将其打印到标签)

因此,当我运行此命令时,我希望它打印响应 header 和最后一个重定向的正文,但实际发生的情况是我只打印原始 URL 的响应 header 和正文。由于这些不包含我正在寻找的信息,这对我没有帮助。我已经用谷歌搜索了我的问题,我发现 HTTP 重定向默认在 URLSessions 中激活,并且您必须弄乱 URLSessionDelegates 才能停用它们,但那就是绝对不是我做的事。感谢您的帮助!

最佳答案

如果您想要重定向信息,您需要成为URLSessionDataTaskDelegate

let session = URLSession(configuration: .default, delegate: self, delegateQueue: nil)

然后您需要实现重定向委托(delegate)函数,并确保使用给定的新重定向请求调用完成处理程序:

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)
}

关于swift - URLSession 响应不包含上次重定向的 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58123261/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com