2016-09-19 4 views
0

Seit Swift 3 Update ändere ich meine Anforderungen von NSMutableURLRequest zu URLRequest. Danach stoppten alle meine Anfragen wegen ungültiger Anmeldeinformationen. Habe schon alles ausprobiert und gesucht. Mein Service läuft wie vorher und testet meine Anfragen von einem Anfrage-Simulator und ging gut.URLRequest Authorization Header konnte nicht festgelegt werden

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

Mein setAuthorizationHeader() Erweiterung

extension URLRequest { 

    mutating func setAuthorizationHeader(){ 

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

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

Ihre String-Interpolation es wahrscheinlich um eine optionale Zeichenkette ist vorbei forHTTPHeaderField –

+1

'versuchen, wenn base64 = Daten lassen .base64EncodedString (Optionen: []) { setValue ("Basic \ (base64)", forHTTPHeaderField: "Authorization")} ' –

+0

@LeoDabus Es hat funktioniert! Vielen Dank. Kannst du erklären, was der Unterschied ist? Ich sehe einen Unterschied. –

Antwort

1

Sie sind nicht Ihre String-Variable auszupacken, bevor der String-Interpolation zu tun und somit eine optionale Zeichenkette Beschreibung forHTTPHeaderField vorbei. Check Proposal: SE-0054. So stellen Sie sicher, dass Sie sicher Ihre optional zu verwenden, wenn wir auspacken:

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