状況
- AFNetworking (NSURLConnection) を使用してサーバー API にアクセスする
- API には、ユーザー名としてトークンを使用した基本認証が必要です
- トークンが無効な場合、API は HTTP 401 を返します
- リクエストの前に基本認証ヘッダーを設定します
401 が返された場合は、次のように再試行します。
AFHTTPRequestOperation *requestOperation = [MyHTTPClient.sharedClient HTTPRequestOperationWithRequest:request success:^(AFHTTPRequestOperation *operation, id responseObject) { processSuccessBlock(operation, responseObject); } failure:^(AFHTTPRequestOperation *operation, NSError *error) { processFailureBlock(operation, error); if (operation.response.statusCode == 401) [MyHTTPClient.sharedClient refreshTokenAndRetryOperation:operation success:processSuccessBlock failure:processFailureBlock]; }];
問題
- サーバーが基本認証チャレンジで HTTP 401 を返すと、AFNetworking/NSURLConnectionは同じ要求を 2 回送信します(最初の要求と認証チャレンジへの応答)。
- しかし、HTTP 401 を自分で処理する上記のコードのため、これはまったく不要 であり、認証チャレンジへの自動応答を停止したい
私が試したこと
- に応答すると
cancelAuthenticationChallenge:
2willSendRequestForAuthenticationChallenge:
番目の呼び出しが中止されますが、401 ではなくエラー コード -1012 (NSURLErrorUserCancelledAuthentication) が返され、実際の応答がマスクされます。
認証チャレンジ/レスポンス メカニズムを無効にして、サーバーのレスポンスを 2 回呼び出さずに取得するにはどうすればよいですか?