URLSession 丢失了标头"授权"



我必须修改标题授权,值以" token xxxx "开头,以调用某些端点以获取我的值项目;

最近我的同事创建了一个新的终点,我使用了完全相同的方法来调用它,但它总是返回状态代码500

如果我重定向请求并在方法中添加授权:

- [nsurlsessionTaskDelegate urlsession:任务:WillPerformhttPredirection:newRequest:newRequest:pleastionHandler:]

然后它将起作用。这意味着urlsession在打电话时不会在标题中传递授权密钥。

从苹果公司的文档中说,我们不应该修改标题授权,但是为什么只有此端点有此问题?

这是用授权密钥调用我的端点的简单代码:

    let session = URLSession(configuration: URLSessionConfiguration.default)
    let url = URL(string: "https://www.myurl.com/api/newAPI")!
    var urlRequest = URLRequest(url: url)
    urlRequest.addValue("Token XXXX", forHTTPHeaderField: "Authorization")
    urlRequest.httpMethod = "GET"
    session.dataTask(with: urlRequest) { (data, response, error) in
       ...

有时与路径有关,请仔细检查您的同事所写的路径,也许您在路径末端缺少'/'。

如果在实现...willPerformHTTPRedirection...之后起作用,则您正在调用的url的API路径不是请求的最终目的地。您发送的初始请求是由url的服务器重定向到另一个URL,最终正在处理。

默认情况下,出于安全原因,大多数HTTP客户端在遵循重定向时剥离Authorization标头 - 他们想阻止您意外地将授权信息泄漏到您不打算达到的服务器。这就是为什么您会看到您看到的错误(尽管500错误表明在Authorization标头完全丢失的情况下,服务器也未正确配置(。

您可以通过调用curl -v https://www.myurl.com/api/newAPI并查看返回哪些状态代码来测试这一点(可能是您所描述的301或302,即重定向(。尝试找出您被重定向到的URL(重定向目标将位于您从该curl Invocation获得的响应的Location标题中(。然后在 let url = URL(theActualURL)!中设置值,然后重试。

相关内容

  • 没有找到相关文章

最新更新