2016-05-16 24 views
6

Ktoś ma pomysł, jak skonfigurować nagłówki HTTP za pomocą NSURLRequest w Swift? Mam uwierzytelniania ustawić na moim serwerze i wymaga jedynie token przekazany do niego, ale mam problemy z ustawieniem nagłówekNagłówki HTTP w/NSURLRequest in swift

mój kod:

func getLatestData() { 
     var loggedInUsersNumber:String = SharingManager.sharedInstance.userID 
     var usersDataPoint:String = StormDataPoint + loggedInUsersNumber 
     activityIND.hidden = false 
     activityIND.startAnimating() 
     let request = NSURLRequest(URL: NSURL(string: usersDataPoint)!) 
     let tokenString = SharingManager.sharedInstance.authToken 
     //request.setValue("Token " + tokenString, forKey: "Authorization") 
     let urlSession = NSURLSession.sharedSession() 
     let task = urlSession.dataTaskWithRequest(request, completionHandler: { 
      (data, response, error) -> Void in 
      if let error = error { 
       print(error) 
       return } 

stworzyłem właściwość „tokenString” Być token, aby przejść do nagłówka i do następnego wiersza, w którym go skomentowałem. request.setvalue - Wskoczyłem do niego i otrzymałem komunikat o błędzie "nie można przesłonić typu danych". Wszystkie moje wyszukiwania pokazują pomoc Celu C. Czy istnieje lepszy sposób na przesłanie nagłówka?

Odpowiedz

21

Swift 3 użyć URLRequest structure zamiast NSURLRequest (podobnie NSURLURL, NSURLSessionURLSession, itd.).

Następnie użyj addValue(_:forHTTPHeaderField:), aby dodać nagłówek.

// swift 3: 
var request = URLRequest(url: URL(string: usersDataPoint)!) 
request.addValue("Token \(tokenString)", forHTTPHeaderField: "Authorization") 

W Swift 2.2 używasz NSMutableURLRequest, jeśli chcesz go zmodyfikować.

+0

[Dokumenty Apple] (https://developer.apple.com/documentation/foundation/nsmutableurlrequest) ostrzega, że ​​pole 'ZEZWOLENIOM nie powinny być ustawione te metody. Czy to jest poprawne? –

8

Można utworzyć Zmutowane żądanie URL, a następnie ustawić wartość dla nazwy pola.

let request = NSMutableURLRequest(URL: NSURL(string: yourURLString)!) 
request.setValue("\(yourValue)", forHTTPHeaderField: "Header-field-name") 
0

Swift3 większy przykład

var req: URLRequest = /* create requets */ 
req.setValue("Bearer Y3GzLG2x6wSXihmUGhwGFw", forHTTPHeaderField: "Authorization") 
req.timeoutInterval = 10 
let task = URLSession.shared.dataTask(with: req, completionHandler: { (data, response, error) in 
    print("completionHandler invoked") 
}) 
task.resume()