2016-05-16 15 views
6

SwiftにNSURLRequestを使用してHTTPヘッダーを設定する方法を知っている人はいますか?私がするプロパティ「tokenString」を作成しスワップでNSURLRequestを持つHTTPヘッダー

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 } 

:私は私のサーバー上で設定された認証を持っており、それはそれに渡されたトークンを必要としますが、私はトラブル

私のコードのヘッダを設定しましたよトークンをヘッダーに渡し、次の行にコメントします。 request.setvalue - 私はそれをポップアップし、 "データ型を無効にすることはできません"というチューンにエラーを取得します。すべての検索でObjective Cのヘルプが表示されます。ヘッダーを渡すより良い方法はありますか?スイフト3において

答えて

21

URLRequest structure代わりにNSURLRequestを(同様に、NSURLURLNSURLSessionURLSession、等)を使用します。

次に、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

変更可能なURLリクエストを作成し、フィールド名の値を設定することができます。

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() 
関連する問題