2016-05-16 17 views
6

Qualcuno ha un'idea su come configurare le intestazioni HTTP con NSURLRequest in Swift? Ho l'autenticazione impostato sul mio server e necessita solo di un token passato ad esso, ma sto avendo impostando l'intestazione guaiIntestazioni HTTP con NSURLRequest in swift

il mio codice:

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 } 

ho creato una proprietà "tokenString" per essere il token per passare nell'intestazione e sulla riga successiva in cui ho commentato. request.setvalue - L'ho inserito e ho ricevuto un errore sulla melodia di "impossibile sovrascrivere il tipo di dati". Tutte le mie ricerche mostrano l'aiuto dell'obiettivo C. C'è un modo migliore per provare a passare un'intestazione?

risposta

21

In Swift 3, utilizzare la URLRequest structure anziché NSURLRequest (analogamente, NSURLURL, NSURLSessionURLSession, ecc).

Quindi utilizzare addValue(_:forHTTPHeaderField:) per aggiungere un'intestazione.

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

In Swift 2.2, si utilizza un NSMutableURLRequest se è necessario modificarlo.

// swift 2: 
let request = NSMutableURLRequest(URL: NSURL(string: usersDataPoint)!) 
request.addValue("Token \(tokenString)", forHTTPHeaderField: "Authorization") 
+0

[docs Apple] (https://developer.apple.com/documentation/foundation/nsmutableurlrequest) avvertono che il campo 'AUTORIZZAZIONE non deve essere impostato utilizzando questi metodi. È giusto? –

8

È possibile creare Richiesta di URL mutabile, quindi impostare il valore per il nome del campo.

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

Swift3 grande esempio

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