web-dev-qa-db-fra.com

En-têtes HTTP avec NSURLRequest dans swift

Quelqu'un a une idée sur la façon de configurer des en-têtes HTTP avec NSURLRequest dans Swift? J'ai l'authentification configurée sur mon serveur et il ne nécessite qu'un jeton, mais je ne parviens pas à définir l'en-tête.

mon code: 

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 }

J'ai créé une propriété "tokenString" devant être le jeton à transmettre dans l'en-tête et sur la ligne suivante où je l'ai commentée. request.setvalue - Je l'ai inséré et j'ai obtenu une erreur du type "impossible de remplacer le type de données". Toutes mes recherches montrent l'aide d'Objective C. Existe-t-il un meilleur moyen de passer une en-tête?

9
James H

Dans Swift 3, utilisez la structure URLRequest au lieu de NSURLRequest (de même, NSURL __ URL, NSURLSessionURLSession, etc.). 

Ensuite, utilisez addValue(_:forHTTPHeaderField:) pour ajouter un en-tête.

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

Dans Swift 2.2, vous utilisez un NSMutableURLRequest si vous devez le modifier.

// Swift 2:
let request = NSMutableURLRequest(URL: NSURL(string: usersDataPoint)!)
request.addValue("Token \(tokenString)", forHTTPHeaderField: "Authorization")
31
kennytm

Vous pouvez créer une demande d'URL mutable, puis définir la valeur du nom du champ.

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

Swift3 plus gros exemple

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