无法设置 URLRequest 授权标头

Posted

技术标签:

【中文标题】无法设置 URLRequest 授权标头【英文标题】:Can't set URLRequest Authorization Header 【发布时间】:2016-09-19 23:07:55 【问题描述】:

自从 swift 3 更新以来,我将请求从 NSMutableURLRequest 更改为 URLRequest。之后,由于凭据无效问题,我的所有请求都停止了。已经尝试并搜索所有内容。我的服务与以前一样继续,并通过请求模拟器测试了我的请求,一切正常。

let url : NSString = "http://url.service.com/method?param=\(name)" as NSString

var request = URLRequest(url: URL(string: url.addingPercentEscapes(using: String.Encoding.utf8.rawValue)!)!)
request.httpMethod = "POST"
request.setAuthorizationHeader()

URLSession.shared.dataTask(with: request) data, response, err in

    do 

        //something

     catch let error1 as NSError 
        //something
    

.resume()

我的 setAuthorizationHeader() 扩展

extension URLRequest 

    mutating func setAuthorizationHeader()

        let data = "user:password".data(using: String.Encoding.utf8)

        let base64 = data?.base64EncodedString(options: [])
        setValue("Basic \(base64)", forHTTPHeaderField: "Authorization")
    

【问题讨论】:

你的字符串插值它可能正在传递一个可选字符串 forHTTPHeaderField 试试if let base64 = data?.base64EncodedString(options: []) setValue("Basic \(base64)", forHTTPHeaderField: "Authorization") @LeoDabus 成功了!谢谢你。你能解释一下有什么区别吗?我发现有什么不同。 @LeoDabus 我还没有这样做?写在 【参考方案1】:

在进行字符串插值之前,您没有解开字符串变量,因此将可选字符串描述传递给 forHTTPHeaderField。 Check Proposal: SE-0054. 只需确保您使用 if let 安全地打开您的可选项:

if let base64 = data?.base64EncodedString(options: []) 
    setValue("Basic \(base64)", forHTTPHeaderField: "Authorization")

【讨论】:

以上是关于无法设置 URLRequest 授权标头的主要内容,如果未能解决你的问题,请参考以下文章

Swift:未设置请求授权标头

无法在标头请求上设置授权?

使用 Apollo 进行本地授权:使用令牌创建客户端。无法将令牌设置为标头

如何设置授权标头(JWT)

@nestjs/swagger 没有设置授权标头

Vue-Resource Authorization 标头无法设置