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

Mon*_*key 94 afnetworking

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

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

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

Mon*_*key 136

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

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

  • 我知道这是旧的,但@wilhelmbot - HTTPMethod会给你一些像GET/POST/PUT等等,可能对检查响应状态没有帮助. (2认同)

Sam*_*Sam 111

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

[[[error userInfo] objectForKey:AFNetworkingOperationFailingURLResponseErrorKey] statusCode]
Run Code Online (Sandbox Code Playgroud)

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

  • 它为我返回0. (4认同)

swa*_*wal 17

对于AFNetworking 3.0,请使用

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


小智 13

NSInteger operationStatusCode = [operation.error code];

NSInteger httpStatusCode = operation.response.statusCode;

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

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

  • 如果它无法达到/ timeout /没有网络处理请求,那operationStatusCode将是-1009.
  • 如果你取消操作队列,那operationStatusCode将是-999.

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


has*_*san 6

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

((error.userInfo[AFNetworkingOperationFailingURLResponseErrorKey])
    as! HTTPURLResponse).statusCode
Run Code Online (Sandbox Code Playgroud)