có cách nào dễ dàng để lấy mã trạng thái http trong khối lỗi từ AFHTTPClient không?


94

Tôi thấy rằng có một danh sách các mã trạng thái http được chấp nhận mà tôi có thể sửa đổi, nhưng tôi nghĩ sẽ rõ ràng hơn nếu tôi có thể lấy mã trạng thái http trong khối lỗi ..

Ok, đã tìm thấy câu trả lời với đối tượng hoạt động

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

Câu trả lời:


136

Ok, đã tìm thấy câu trả lời với đối tượng hoạt động

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

Điều này có thể cũng hữu ích[operation.request HTTPMethod]
defvol

2
Tôi biết điều này đã cũ, nhưng @wilhelmbot - HTTPMethod sẽ cung cấp cho bạn một cái gì đó như GET / POST / PUT ... vv, có thể không hữu ích cho việc kiểm tra trạng thái phản hồi.
shortstuffsushi

111

Trong các phiên bản mới hơn của AFNetworking, bạn có thể truy xuất đối tượng phản hồi từ lỗi:

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

Điều này rất hữu ích nếu bạn đang xử lý lỗi ở dòng xa hơn và không muốn chuyển xung quanh đối tượng phản hồi.


Trước tiên, bạn có thể cần phải nhận được lỗi cơ bản. NSError *underlyingError = error.userInfo[@"NSUnderlyingError"]
Onato

19

Đối với AFNetworking 3.0 , hãy sử dụng

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

13

NSInteger operationStatusCode = [mã lỗi operation.error];

NSInteger httpStatusCode = operation.response.statusCode;

Nếu yêu cầu bị hủy / không thể truy cập / hết thời gian, httpStatusCodesẽ luôn như vậy 0.

Ngoài ra, bạn có thể xác định vấn đề bằng cách hiểu operationStatusCode. Nó là một NSErrorĐối tượng.

  • Nếu nó không thể kết nối / hết thời gian chờ / không có mạng để xử lý yêu cầu, operationStatusCodenó sẽ là -1009.
  • Nếu bạn hủy bỏ các hoạt động hàng đợi operationStatusCodesẽ được -999.

Bạn có thể kiểm tra tất cả các NSErrormã khác và mô tả của chúng trong tài liệu của Apple


7

Tôi đã có thể lấy mã trạng thái với Swift 3:

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

0

Nó làm việc cho tôi Thêm dòng dưới đây vào yêu cầu của bạn

manager.requestSerializer = [Bộ nối tiếp AFJSONRequestSerializer];

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.