有没有一种简单的方法从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];