is there an easy way to get the http status code in the failure block from AFHTTPClient?
Solution 1
Ok, found the answer with the operation object
failure:^(AFHTTPRequestOperation *operation, NSError *error){
NSLog(@"error code %d",[operation.response statusCode]);
}];
Solution 2
In newer versions of AFNetworking, you can retrieve the response object from the error:
[[[error userInfo] objectForKey:AFNetworkingOperationFailingURLResponseErrorKey] statusCode]
This is handy if you're doing error handling further up the line and don't want to pass around the response object.
Solution 3
For AFNetworking 3.0, use
failure:^(NSURLSessionTask *operation, NSError *error) {
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)operation.response;
httpResponse.statusCode;
NSLog(@"status code: %li", (long)httpResponse.statusCode);
}
Solution 4
NSInteger operationStatusCode = [operation.error code];
NSInteger httpStatusCode = operation.response.statusCode;
If the requests were cancelled/unreachable/timeout, httpStatusCode
will be always 0
.
Alternatively you can identify the issue by understanding the operationStatusCode
. It is a NSError
Object.
- If it cannot reach/timeout/no network to process request, the
operationStatusCode
will be-1009
. - If you cancel the operations queue the
operationStatusCode
will be-999
.
You can check all other NSError
codes and their descriptions in Apple's documentation
Solution 5
I've been able to get the status code with Swift 3:
((error.userInfo[AFNetworkingOperationFailingURLResponseErrorKey])
as! HTTPURLResponse).statusCode
MonkeyBonkey
CTO of Pictorious.com, a mobile app for turning photo sharing into a fun meme-game.
Updated on May 24, 2020Comments
-
MonkeyBonkey about 4 years
I see that there is a list of accepted http status codes that I can modify, but I think it would be cleaner if I can get the http status code in the failure block ..
Ok, found the answer with the operation object
failure:^(AFHTTPRequestOperation *operation, NSError *error){ NSLog(@"error code %d",[operation.response statusCode]); }];
-
defvol over 11 yearsThis might be also helpful
[operation.request HTTPMethod]
-
shortstuffsushi almost 11 yearsI know this is old, but @wilhelmbot -- HTTPMethod would give you something like GET/POST/PUT... etc, probably not helpful for checking response status.
-
Onato over 9 yearsYou might need to get the underlying error first.
NSError *underlyingError = error.userInfo[@"NSUnderlyingError"]