我正在使用的后端 API 要求每个请求都发送一个令牌,以针对Authorization
这种格式的 HTTP 标头键 - Token xxxxxxxxxx
.
现在,我正在做以下事情。
var getRequest = URLRequest(url: url)
getRequest.addValue("Token xxxxxxxx", forHTTPHeaderField: "Authorization")
这有时会起作用,有时会Authorization
在发出请求时剥离标头字段。我使用查尔斯代理检查了这一点。
Apple 的文档说明了以下内容。
NSURLSession 对象旨在为您处理 HTTP 协议的各个方面。因此,您不应修改以下标头:授权、连接、主机、WWW-Authenticate
作为解决方案,许多人建议使用didReceiveAuthenticationChallenge
URLSession 的委托方法。
在这里,您需要传递一个URLSession.AuthChallengeDisposition
实例来说明您希望如何响应质询,并传递一个URLCredential
实例来传递凭据以响应身份验证质询。
我不知道如何以及是否可以创建一个将为标题字段URLCredential
添加的实例。Token xxxxxxxx
Authorization
有知识的人可以帮我解决这个问题吗?
PS - 这个问题中提到的所有代码都在 Swift 3 中。
这个问题问的问题与我所拥有的类似。但是,那里给出的答案对我不起作用。而且,在有关 Apple 不允许Authorization
添加标题的问题下提出的一些问题没有得到解答。
编辑:
贴出相关代码。
var getRequest = URLRequest(url: url)
getRequest.httpMethod = "GET"
getRequest.addValue("application/json", forHTTPHeaderField: "Content-Type")
getRequest.addValue("application/json", forHTTPHeaderField: "Accept")
let token = DataProvider.sharedInstance.token
getRequest.addValue("Token \(token)", forHTTPHeaderField: "Authorization")
let getTask = URLSession.shared.dataTask(with: getRequest) { (data, response, error) in
if let data = data {
print("--------GET REQUEST RESPONSE START--------")
print("CODE: \((response as? HTTPURLResponse)?.statusCode ?? 0)")
print("Response Data:")
print(String(data: data, encoding: .utf8) ?? "")
print("--------GET REQUEST RESPONSE END--------")
}
}
getTask.resume()
在这里,我可以确认“授权”的标头字段已添加到请求的标头字典中。
但是,当我检查服务器上的请求时,缺少“授权”的标头字段。有什么想法吗?