有没有一种简单的方法从AFHTTPClient获取失败块中的http状态码?

我看到有一个我可以修改的接受的http状态代码的列表,但是我认为如果我可以在失败块中获得http状态代码,它会更干净。

好的,find操作对象的答案

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

好的,find与操作对象的答案

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

在较新版本的AFNetworking中,您可以从错误中检索响应对象:

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

如果你正在进行error handling,并且不想传递响应对象,这很方便。

NSInteger operationStatusCode = [operation.error code];

NSInteger httpStatusCode = operation.response.statusCode;

如果请求被取消/不可达/超时, httpStatusCode将始终为0

或者,您可以通过了解operationStatusCode来识别问题。 这是一个NSError对象。

  • 如果无法到达/超时/无networking处理请求, operationStatusCode将为-1009
  • 如果取消操作队列,则operationStatusCode将为-999

你可以在Apple的文档中检查所有其他的NSError代码和它们的描述

对于AFNetworking 3.0 ,请使用

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

我已经能够得到状态代码与Swift 3:

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

这对我有用在下面的行中添加你的请求

manager.requestSerializer = [AFJSONRequestSerializer serializer];