有没有一种简单的方法可以从AFHTTPClient获取故障块中的http状态代码?


94

我看到有一个可以接受的HTTP状态代码列表,可以修改,但是我认为如果可以在故障块中获取http状态代码,它将更加干净。

好了,找到了操作对象的答案

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

Answers:


136

好了,找到了操作对象的答案

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

这可能也很有帮助[operation.request HTTPMethod]
defvol 2012年

2
我知道这很旧,但是@wilhelmbot-HTTPMethod会给您类似GET / POST / PUT ...之类的东西,可能对检查响应状态没有帮助。
shortstuffsushi

111

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

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

如果您要进一步处理错误并且不想传递响应对象,这将很方便。


您可能需要先获取基础错误。NSError *underlyingError = error.userInfo[@"NSUnderlyingError"]
Onato 2014年

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代码];

NSInteger httpStatusCode = operation.response.statusCode;

如果请求被取消/无法访问/超时,httpStatusCode将始终为0

或者,您可以通过了解问题来确定问题operationStatusCode。它是一个NSError对象。

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

您可以NSErrorApple文档中查看所有其他代码及其说明。


7

我已经能够通过Swift 3获取状态代码:

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

0

对我来说有用在您的要求下添加以下行

manager.requestSerializer = [AFJSONRequestSerializer序列化器];

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.