is there an easy way to get the http status code in the failure block from AFHTTPClient?

前端 未结 6 1727
猫巷女王i
猫巷女王i 2020-12-13 01:05

I see that there is a list of accepted http status codes that I can modify, but I think it would be cleaner if I can get the http status code in the failure block ..

相关标签:
6条回答
  • 2020-12-13 01:45

    In newer versions of AFNetworking, you can retrieve the response object from the error:

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

    This is handy if you're doing error handling further up the line and don't want to pass around the response object.

    0 讨论(0)
  • 2020-12-13 01:47

    Ok, found the answer with the operation object

    failure:^(AFHTTPRequestOperation *operation, NSError *error){ 
           NSLog(@"error code %d",[operation.response statusCode]);
    }];
    
    0 讨论(0)
  • 2020-12-13 01:52

    NSInteger operationStatusCode = [operation.error code];

    NSInteger httpStatusCode = operation.response.statusCode;

    If the requests were cancelled/unreachable/timeout, httpStatusCode will be always 0.

    Alternatively you can identify the issue by understanding the operationStatusCode. It is a NSError Object.

    • If it cannot reach/timeout/no network to process request, the operationStatusCode will be -1009.
    • If you cancel the operations queue the operationStatusCode will be -999.

    You can check all other NSError codes and their descriptions in Apple's documentation

    0 讨论(0)
  • 2020-12-13 01:57

    It's work for me Add below line to your request

    manager.requestSerializer = [AFJSONRequestSerializer serializer];

    0 讨论(0)
  • 2020-12-13 01:59

    I've been able to get the status code with Swift 3:

    ((error.userInfo[AFNetworkingOperationFailingURLResponseErrorKey])
        as! HTTPURLResponse).statusCode
    
    0 讨论(0)
  • 2020-12-13 02:05

    For AFNetworking 3.0, use

    failure:^(NSURLSessionTask *operation, NSError *error) {
        NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)operation.response;
        httpResponse.statusCode;
        NSLog(@"status code: %li", (long)httpResponse.statusCode);
    }
    
    0 讨论(0)
提交回复
热议问题