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

时间:2011-12-12 03:02:47

标签: afnetworking

我看到有一个我可以修改的已接受的http状态代码列表,但我认为如果我可以在失败块中获取http状态代码会更清晰。

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

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

6 个答案:

答案 0 :(得分:135)

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

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

答案 1 :(得分:109)

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

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

如果您正在进行错误处理并且不想传递响应对象,那么这很方便。

答案 2 :(得分:17)

对于AFNetworking 3.0 ,请使用

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

答案 3 :(得分:13)

  

NSInteger operationStatusCode = [operation.error code];

     

NSInteger httpStatusCode = operation.response.statusCode;

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

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

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

您可以在Apple's documentation

中查看所有其他NSError代码及其说明

答案 4 :(得分:4)

我已经能够使用Swift 3获取状态代码:

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

答案 5 :(得分:0)

这对我有用 在您的请求中添加以下行

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