94

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

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

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

6 回答 6

136

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

failure:^(AFHTTPRequestOperation *operation, NSError *error){ 
       NSLog(@"error code %d",[operation.response statusCode]);
}];
于 2011-12-12T03:15:31.790 回答
112

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

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

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

于 2013-03-18T08:11:22.843 回答
19

对于 AFNetworking 3.0,使用

failure:^(NSURLSessionTask *operation, NSError *error) {
    NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)operation.response;
    httpResponse.statusCode;
    NSLog(@"status code: %li", (long)httpResponse.statusCode);
}
于 2015-12-11T12:07:05.910 回答
13

NSInteger operationStatusCode = [operation.error code];

NSInteger httpStatusCode = operation.response.statusCode;

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

或者,您可以通过了解operationStatusCode. 它是一个NSError对象。

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

您可以在Apple 的文档中查看所有其他NSError代码及其描述

于 2014-08-02T11:39:44.927 回答
7

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

((error.userInfo[AFNetworkingOperationFailingURLResponseErrorKey])
    as! HTTPURLResponse).statusCode
于 2017-02-01T17:11:29.927 回答
0

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

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

于 2015-10-28T09:02:53.190 回答