2016-05-16 2 views
6

У кого-нибудь есть идея, как настроить HTTP-заголовки с NSURLRequest в Swift? Я аутентификации установлен на моем сервере, и это нужно только маркер, переданный ему, но у меня установка заголовок проблемыHTTP заголовки с NSURLRequest в swift

мой код:

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 } 

Я создал свойство «tokenString» быть token, чтобы перейти в заголовок и на следующей строке, где я прокомментировал это. request.setvalue - я вынул его и получил сообщение об ошибке «не может переопределить тип данных». Все мои поиски показывают помощь Objective C. Есть ли лучший способ попробовать передать заголовок?

ответ

21

В Swift 3, используют URLRequest structure вместо NSURLRequest (аналогично, NSURLURL, NSURLSessionURLSession и т.д.).

Затем используйте addValue(_:forHTTPHeaderField:), чтобы добавить заголовок.

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

В Swift 2.2, вы используете NSMutableURLRequest, если вам нужно изменить его.

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

[документы компании Apple] (https://developer.apple.com/documentation/foundation/nsmutableurlrequest) предупреждают, что 'поле Authorization' не должно быть установлено с помощью эти методы. Это правильно? –

8

Вы можете создать Mutable URL Request, а затем установить значение для имени поля.

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

Swift3 больше пример

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() 
Смежные вопросы