AFHTTPClientから失敗ブロックのhttpステータスコードを取得する簡単な方法はありますか?


94

変更できる承認済みのhttpステータスコードのリストがあることがわかりますが、失敗ブロックでhttpステータスコードを取得できればよりクリーンになると思います。

わかりました、操作オブジェクトで答えを見つけました

failure:^(AFHTTPRequestOperation *operation, NSError *error){ 
        NSLog(@"error code %d",[operation.response statusCode]);
}];

回答:


136

わかりました、操作オブジェクトで答えを見つけました

failure:^(AFHTTPRequestOperation *operation, NSError *error){ 
       NSLog(@"error code %d",[operation.response statusCode]);
}];

これも役に立つかもしれません[operation.request HTTPMethod]
defvol '30

2
私はこれが古いことを知っていますが、@ wilhelmbot-HTTPMethodはGET / POST / PUT ...などのようなものを提供し、おそらく応答ステータスのチェックには役立ちません。
shortstuffsushi 2013

111

AFNetworkingの新しいバージョンでは、エラーから応答オブジェクトを取得できます。

[[[error userInfo] objectForKey:AFNetworkingOperationFailingURLResponseErrorKey] statusCode]

これは、エラー処理をさらに上で行っており、応答オブジェクトを渡したくない場合に便利です。


最初に根本的なエラーを取得する必要がある場合があります。NSError *underlyingError = error.userInfo[@"NSUnderlyingError"]
Onato

19

AFNetworking 3.0の場合は、

failure:^(NSURLSessionTask *operation, NSError *error) {
    NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)operation.response;
    httpResponse.statusCode;
    NSLog(@"status code: %li", (long)httpResponse.statusCode);
}

13

NSInteger operationStatusCode = [operation.error code];

NSInteger httpStatusCode = operation.response.statusCode;

リクエストがキャンセルされた/到達できない/タイムアウトした場合httpStatusCodeは、常にになります0

または、を理解することで問題を特定できますoperationStatusCode。これは、あるNSErrorオブジェクト。

  • 到達できない/タイムアウトしない/リクエストを処理するネットワークがない場合、はにoperationStatusCodeなります-1009
  • 操作キューをキャンセルoperationStatusCodeすると、になります-999

AppleのドキュメントNSErrorで他のすべてのコードとその説明を確認できます


7

Swift 3でステータスコードを取得できました。

((error.userInfo[AFNetworkingOperationFailingURLResponseErrorKey])
    as! HTTPURLResponse).statusCode

0

それは私のために働きますあなたの要求に以下の行を追加してください

manager.requestSerializer = [AFJSONRequestSerializer serializer];

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.