Can't set URLRequest Authorization Header

2019-09-14 17:23发布

Since swift 3 update I change my requests from NSMutableURLRequest to URLRequest. After that all my requests stopped worked due invalid credentials problem. Already tried and search everything. My service continue same as before and tested my requests from a request simulator and went fine.

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()

My setAuthorizationHeader() extension

extension URLRequest {

    mutating func setAuthorizationHeader(){

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

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

1条回答
We Are One
2楼-- · 2019-09-14 17:26

You are not unwrapping your String variable before doing the String interpolation and thus passing an Optional string description to forHTTPHeaderField. Check Proposal: SE-0054. Just make sure you safely unwrap your optional using if let:

if let base64 = data?.base64EncodedString(options: []) {
    setValue("Basic \(base64)", forHTTPHeaderField: "Authorization")
}
查看更多
登录 后发表回答