2016-05-27 2 views
2

При создании конкретного запроса POST инструменты разработчика Firefox (FF) показывают запрос. заголовок с именем «Authorization» со значением «Bearer X», где X - токен доступа, полученный при входе в систему. Когда я редактирую этот запрос в FF и удаляю строку «Авторизация», я получаю ошибку 400. Когда я верну его, 200, и все хорошо. Однако я еще не понял, как установить этот заголовок запроса программно, не получив 400.Swift 2 Как добавить заголовок авторизации в запрос POST

Кроме того, FF-инструменты как «Тело запроса» {«source»: «desktop-profile 2015»}. Я предполагаю, что это JSON. Я пробовал опубликовать это несколькими способами (см. Код), но не имел успеха.

// the following fields are set in the object "Request"'s initialization 
let accessToken = "1,2,3456789012,3x4f560fa7a89e01a2;33ab4b4e5e67e8e9b9f0e1a23db45678f9a9a0ff" // replaced some characters for this StackOF posting 
let authorization = "Bearer \(accessToken)" 
let method = "POST" 
let userID = "1234567" 
let URL = NSURL(string: "https://www.somesite.com/apitun/profile/\(userID)hide") 

// tried setting params to all of the following 4: 
let params = "" 
let params = "&_json={}" 
let params = "&_json={\"source\":\"desktop profile - 2015\"} 
let params = "&_json=%7B%22source%22%3A%22desktop%2Dprofile%202015%22%7D" 

func execute() { 
    let session = NSURLSession.sharedSession() 
    let request = NSMutableURLRequest(URL: URL) 
    if authorization != "" { 
     request.addValue(authorization, forHTTPHeaderField: "Authorization") 
    } 

    request.HTTPMethod = self.method 
    request.HTTPBody = self.params.dataUsingEncoding(NSUTF8StringEncoding) 
    self.task = session.dataTaskWithRequest(request) { 
     (data, response, error) in 
     NSHTTPCookieStorage.sharedHTTPCookieStorage().setCookies(self.cookies, forURL: self.URL, mainDocumentURL: nil) 
     if error == nil { 
      do { 
       self.responseHeaders = response as! NSHTTPURLResponse 
       self.cookies = NSHTTPCookieStorage.sharedHTTPCookieStorage().cookiesForURL(self.URL)! 
       self.statusCode = self.responseHeaders.statusCode 

       switch self.statusCode { 

       case 200: 
        self.contentsOfURL = try NSString(contentsOfURL: self.URL, encoding: NSUTF8StringEncoding) 
       case 400: 
        print("400: page not found") 

       case 404: 
        print("404: page not found") 

       case 407: 
        print("407: failed authenticate proxy credentials") 

       default: 
        print("unable to get statusCode") 

       } 
      } catch { 

      } 
      self.isRequesting = false 
     } else { 
      print(error) 
     } 
    } 
    self.task.resume() 
} 

ответ

8
let request = NSMutableURLRequest(URL: NSURL(string: fullURL)!) 

let accessToken = "your access token" 
request.setValue("Bearer \(accessToken)", forHTTPHeaderField: "Authorization")