私が使用しているバックエンドAPIでは、HTTPヘッダーキーAuthorization
に対してすべての要求とともにトークンを送信する必要があります。Token xxxxxxxxxx
。URLSessionのHTTPヘッダーで「承認」に「トークンxxxxxxxxxx」を設定する方法
今、私は次のことを行っています。
var getRequest = URLRequest(url: url)
getRequest.addValue("Token xxxxxxxx", forHTTPHeaderField: "Authorization")
これはときどき動作し、要求が送信されたときにヘッダーフィールドAuthorization
が削除されます。私はチャールズプロキシを使ってこれをチェックした。
Apple's documentationは以下のように述べています。
NSURLSessionオブジェクトは、 HTTPプロトコルのさまざまな側面を処理するように設計されています。その結果、あなたは 次のヘッダー変更しないでください。この解決策として認可、接続、ホスト、WWW認証
を、多くの人がURLSessionためdidReceiveAuthenticationChallenge
デリゲートメソッドを使用することをお勧め。
ここでURLSession.AuthChallengeDisposition
インスタンスを渡して、チャレンジにどのように応答するかを指定し、URLCredential
インスタンスが認証チャレンジに応答するために認証情報を渡す必要があります。
URLCredential
インスタンスを作成して、ヘッダフィールドAuthorization
にToken xxxxxxxx
を追加する方法を知りません。
もっと知りたい方は、これを解決する方法を教えてください。
PS - この質問に記載されているすべてのコードはSwift 3にあります。 This questionは私のものに似たものを求めています。しかし、そこに与えられた答えは私のために働かない。 AppleがAuthorization
のヘッダーを追加することを許可していないという質問の下で質問された質問のいくつかには、回答がなくなっています。
編集:
関連するコードを掲載しています。
var getRequest = URLRequest(url: url)
getRequest.httpMethod = "GET"
getRequest.addValue("application/json", forHTTPHeaderField: "Content-Type")
getRequest.addValue("application/json", forHTTPHeaderField: "Accept")
let token = DataProvider.sharedInstance.token
getRequest.addValue("Token \(token)", forHTTPHeaderField: "Authorization")
let getTask = URLSession.shared.dataTask(with: getRequest) { (data, response, error) in
if let data = data {
print("--------GET REQUEST RESPONSE START--------")
print("CODE: \((response as? HTTPURLResponse)?.statusCode ?? 0)")
print("Response Data:")
print(String(data: data, encoding: .utf8) ?? "")
print("--------GET REQUEST RESPONSE END--------")
}
}
getTask.resume()
ここで、「承認」のヘッダーフィールドがリクエストのヘッダーディクショナリに追加されていることが確認できます。
しかし、どのリクエストがサーバーにヒットしたかを確認すると、「Authorization」のヘッダーフィールドが表示されません。何かご意見は?
'request.addValue(value、forHTTPHeaderField:key)'は私の経験では信頼できます。私はあなたのコードが "問題の状況"での要求に対して呼び出されていないと思う。これを理解するために関連性の高いコードを投稿してください。 – shallowThought
@shallowThought関連コードを追加しました。私がしたことが何か間違っているかどうかを見てください。 –