我正在使用的后端API需要一个令牌Authorization ,以此格式发送每个针对HTTP头密钥的请求- Token xxxxxxxxxx.
现在,我正在做以下事情.
var getRequest = URLRequest(url: url)
getRequest.addValue("Token xxxxxxxx", forHTTPHeaderField: "Authorization")
Run Code Online (Sandbox Code Playgroud)
这有时会起作用,有时候会Authorization在发出请求时剥离标题字段.我使用Charles代理检查了这个.
Apple的文档说明如下.
NSURLSession对象旨在为您处理HTTP协议的各个方面.因此,您不应修改以下标头:授权,连接,主机,WWW-身份验证
作为解决方案,许多人建议使用didReceiveAuthenticationChallengeURLSession 的委托方法.
在这里,您需要传递一个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, …Run Code Online (Sandbox Code Playgroud)