使用 HTTPURLResponse 读取自定义 httpHeader

问题描述 投票:0回答:1
let task = URLSession.shared.dataTask(with: url) { _, response, error in
        if let error {
            print(error.localizedDescription)
            return
        }
        if let response = response as? HTTPURLResponse {
            print(response.description)
            if let xUserSigned = response.allHeaderFields["X-User-Signed"] as? String {
                print("X-User-Signed: \(xUserSigned)")
            }
        }
        completion(true)
    }
    task.resume()

我试图在显示页面之前读取自定义 httpHeader 响应,我想知道用户是否已签名,因此在我的标题中是此字段“X-User-Signed”(我也已经尝试过区分大小写),但是当我打印整个标头响应该字段不存在。令人沮丧的是我可以在 safari 或 chrome 上看到它。

我已经尝试过区分大小写、cookie 刷新、还设置 safari 用户代理,但没有任何效果

swift http-headers httpresponse httpresponsemessage
1个回答
0
投票

不确定为什么你的代码不能与

allHeaderFields
一起使用,但它的文档引用了这个:

HTTP 标头不区分大小写。为了简化您的代码,URL 加载系统将某些标头字段名称规范化为其标准形式。例如,如果服务器发送内容长度标头,它会自动调整为内容长度。 由于此属性是标准 Swift 字典,因此其键区分大小写。要执行不区分大小写的标头查找,请改用 value(forHTTPHeaderField:) 方法。

那么你可以尝试一下吗:

if let xUserSigned = response.value(forHTTPHeaderField: "X-User-Signed") {
    print("X-User-Signed: \(xUserSigned)")
}
© www.soinside.com 2019 - 2024. All rights reserved.