【问题标题】:400 error when downloading file with "Authorization" header下载带有“授权”标题的文件时出现 400 错误
【发布时间】:2020-06-18 03:09:58
【问题描述】:

服务器返回一个json文件是:

{"ctrl":{"code":400,"text":"Not valid Access token","ts":"2020-03-05T11:54:01.547Z"}}

代码:

public func startDownload(url: URL, pathURL: URL) {
        let accessToken: String! = "Bearer \(Constants.access_token)"
        self.dirURL = pathURL
        var request = URLRequest(url: url)
        guard let token = accessToken else { return }
        request.addValue(token, forHTTPHeaderField: "Authorization")
        downloadTask = backgroundSession.downloadTask(with: request)
        downloadTask.resume()
}

仅供参考:访问令牌有效,它正在与 Postman 一起使用。

【问题讨论】:

  • 能分享一下调试请求吗
  • 检查token的值 下断点或者打印出来。
  • @KeshuR。 token 不是 nil 而是有效的
  • 后端日志显示access token为空,但实际不为空
  • 您确定您的服务器需要该格式的授权标头吗?

标签: ios swift urlsession urlrequest


【解决方案1】:

您会遇到问题,因为不幸的是,这个问题没有好的解决方案。 AuthorizationReserved HTTP Headers 之一,在 URLRequest 标头或 URLSessionConfiguration.httpAdditionalHeaders 中设置它可能根本不起作用:

如果您为这些保留标头之一设置了值,系统可能会忽略您设置的值,或者用自己的值覆盖它,或者干脆不发送它。

人们可能期望您可以在处理身份验证挑战的URLSessionTaskDelegate 方法urlSession(_:task:didReceive:completionHandler:) 中提供此令牌,但在其中您需要提供URLCredential 对象,遗憾的是它没有采用@ 的构造函数987654329@ 令牌,所以这是不行的。

所以基本上,除了编写自己的 URLProtocol 实现之外,最好的办法是在一些额外的自定义标头字段中发送令牌,然后让服务器从那里获取它(如果你可以控制服务器代码) . Source

【讨论】:

  • 它有效,我已将“授权”更改为“X-授权”。谢谢。
猜你喜欢
  • 1970-01-01
  • 2011-04-28
  • 2013-02-24
  • 2015-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多