无法设置 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 授权标头的主要内容,如果未能解决你的问题,请参考以下文章