Lucas Brito
Lucas Brito

Reputation: 1028

Can't set URLRequest Authorization Header

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")
    }
}

Upvotes: 0

Views: 1865

Answers (1)

Leo Dabus
Leo Dabus

Reputation: 236360

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")
}

Upvotes: 2

Related Questions