Lucas Brito Lucas Brito - 1 year ago 133
iOS Question

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 = "\(name)" as NSString

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

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

do {


} catch let error1 as NSError {


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

Answer Source

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

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