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 用户代理,但没有任何效果
不确定为什么你的代码不能与
allHeaderFields
一起使用,但它的文档引用了这个:
HTTP 标头不区分大小写。为了简化您的代码,URL 加载系统将某些标头字段名称规范化为其标准形式。例如,如果服务器发送内容长度标头,它会自动调整为内容长度。 由于此属性是标准 Swift 字典,因此其键区分大小写。要执行不区分大小写的标头查找,请改用 value(forHTTPHeaderField:) 方法。
那么你可以尝试一下吗:
if let xUserSigned = response.value(forHTTPHeaderField: "X-User-Signed") {
print("X-User-Signed: \(xUserSigned)")
}