无法设置 URLRequest 授权 Header
Can't set URLRequest Authorization Header
自从 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。 Check Proposal: SE-0054. 只要确保你使用 if let:
安全地解开你的可选
if let base64 = data?.base64EncodedString(options: []) {
setValue("Basic \(base64)", forHTTPHeaderField: "Authorization")
}
自从 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。 Check Proposal: SE-0054. 只要确保你使用 if let:
安全地解开你的可选if let base64 = data?.base64EncodedString(options: []) {
setValue("Basic \(base64)", forHTTPHeaderField: "Authorization")
}