2015-09-25 177 views
3

我設法從我的服務器獲取json,但現在我想通過http頭添加額外的安全性。這就是我的代碼幾乎看起來像現在:在swift中發送自定義HTTP頭

let urlPath = "http://www.xxxxxxxx.com" 
     let url = NSURL(string: urlPath) 
     let session = NSURLSession.sharedSession() 
     let task = session.dataTaskWithURL(url!, completionHandler: { (data, response, error) -> Void in 
      if ((error) != nil) { 
       println("Error") 
      } else { 
       // process json 
       let jsonResult = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: nil) as! NSDictionary 

       println(jsonResult["user"]) 
      } 
     }) 

,我要添加到該請求的報頭如下:

  • UID,它擁有一個整數值
  • 哈希,這是一個字符串

如果有幫助,我有建於鈦框架另一個應用程序使用這個語法:

xhr.setRequestHeader('uid', userid); 
xhr.setRequestHeader('hash', hash); 

所以,基本上是尋找一個Swift等價物。

+0

可能重複的[NSURLSessionConfiguration HTTPAdditionalHeaders未設置(http://stackoverflow.com/questions/24751768/nsurlsessionconfiguration-httpadditionalheaders-not-set) – Abizern

+0

@Abizern這個問題怎麼能成爲這個問題的重複?那一個是針對objective-c的不是? –

+0

@WilliamKinaan答案在Swift中,並回答了這個問題。 – Abizern

回答

1

我建議你使用Alamofire聯網 https://github.com/Alamofire/Alamofire

這是寫在雨燕是每一個易於使用。看看那個頁面。

+4

Swift已經配備了一套強大的網絡API。 –

+1

其實我沒看到你評論的原因。從來沒有說過它更強大,我只是覺得它更容易使用,所以我建議使用它。 – r4id4

+0

我的評論是什麼原因? bty這不是我的降低,我正在檢查圖書館,這是很好的,但我總是喜歡與本地 –

3

您正在使用dataTaskWithURL,而您應該使用dataTaskWithRequest,這需要NSMutableURLRequest對象作爲輸入。使用這種對象可以設置的HTTP標頭,HTTPBody,或列舉HTTPMethod

 let urlPath = "http://www.xxxxxxxx.com" 
     let url = NSURL(string: urlPath) 
     let session = NSURLSession.sharedSession() 
     let request = NSMutableURLRequest(URL: url!) 
     request.HTTPMethod = "GET" // make it post if you want 
     request.addValue("application/json", forHTTPHeaderField: "Content-Type")//This is just an example, put the Content-Type that suites you 
     //request.addValue(userid, forHTTPHeaderField: "uid") 
     //request.addValue(hash, forHTTPHeaderField: "hash") 
     let task = session.dataTaskWithRequest(request, completionHandler: { (data, response, error) -> Void in 
      //do anything you want 
     }) 
     task.resume()