1

アプリで HTTP クライアント エラーを処理しようとしています。理想的には、エラーの原因となったリクエストに関係なく、このようなエラーが発生するたびに静的メソッドを実行したいと考えています。

何か間違ったことをしているようです -RKDynamicResponseDescriptorメソッドを呼び出すために a を追加しようとしましたが、呼び出されません。サーバーがエラーで応答するたびに、要求は終了しません (ネットワーク アクティビティ インジケーターは回転し続け、AFNetworkingOperationDidFinishNotificationポストされません)。

AFHTTPRequest次のような新しいリクエストを作成することで、動作を再現できます。

request = [[RKObjectManager sharedManager].HTTPClient requestWithMethod:@"GET" path:@"events" parameters:nil];
AFHTTPRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request
                    success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
                        NSLog(@"%@", JSON);
                    }
                    failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) {
                        NSLog(@"Request Failed with Error: %@, %@", error, error.userInfo);
                    }];

ブロックも呼び出されsuccessません。failure最初の行を

request = [[NSURLRequest alloc] initWithURL:[NSURL URLWithString:url]];

ブロックが呼び出されます。RestKit に HTTP エラー応答を処理させるにはどうすればよいですか?

編集 1:どうやらこれは、サーバーが401認証チャレンジを返したときに両方のケースで発生します。にブレークポイントを設定しようとしRKHTTPRequestOperationましたdidReceiveAuthenticationChallengeが、トリガーされません。My Fiddler は、1 つの要求のみが送信されていることを示しています。

4

1 に答える 1

1

いろいろいじった後、この問題の理由を見つけたと思います。このAFUrlConnectionRequestクラスはconnection:willSendRequestForAuthenticationChallenge:、SSL ピンニングが有効な場合にデリゲート メソッドを実装します。認証チャレンジが SSL に関連していない場合、実装は単純に戻ります。

NSUrlConnectionDelegateのドキュメントから:

この方法により、デリゲートは接続認証について情報に基づいた決定を一度に行うことができます。デリゲートがこのメソッドを実装する場合、実装する必要はありません

  • connection:canAuthenticateAgainstProtectionSpace:,
  • 接続:didReceiveAuthenticationChallenge:,
  • connectionShouldUseCredentialStorage:.

実際、これらの他のメソッドは呼び出されません。

メソッドは呼び出されないため、RestKit はリクエストが HTTP エラー 401 になったことを認識しません。

この定義を削除して問題を解決したため、デリゲート メソッドは実装されていません。

#define _AFNETWORKING_PIN_SSL_CERTIFICATES_
于 2013-05-31T19:20:39.810 に答える