AFHTTPClient의 실패 블록에서 http 상태 코드를 얻는 쉬운 방법이 있습니까?


94

수정할 수있는 허용 된 http 상태 코드 목록이 있지만 실패 블록에서 http 상태 코드를 얻을 수 있다면 더 깨끗할 것이라고 생각합니다.

좋아, 작업 객체로 답을 찾았습니다.

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

답변:


136

좋아, 작업 객체로 답을 찾았습니다.

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

이것은 또한 도움이 될 수 있습니다[operation.request HTTPMethod]
defvol

2
나는 이것이 오래되었다는 것을 알고 있지만 @wilhelmbot-HTTPMethod는 응답 상태를 확인하는 데 도움이되지 않는 GET / POST / PUT ... 등과 같은 것을 제공 할 것입니다.
shortstuffsushi 2013-08-08

111

최신 버전의 AFNetworking에서는 오류에서 응답 객체를 검색 할 수 있습니다.

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

이것은 오류 처리를 더 많이 수행하고 응답 객체를 전달하지 않으려는 경우에 편리합니다.


먼저 근본적인 오류를 가져와야 할 수도 있습니다. NSError *underlyingError = error.userInfo[@"NSUnderlyingError"]
Onato

19

AFNetworking 3.0 의 경우

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

13

NSInteger operationStatusCode = [operation.error 코드];

NSInteger httpStatusCode = operation.response.statusCode;

요청이 취소 / 연결 불가능 / 시간 초과 된 httpStatusCode경우 항상 0입니다.

또는을 이해하여 문제를 식별 할 수 있습니다 operationStatusCode. 그것은이다 NSError개체입니다.

  • 요청을 처리 할 네트워크에 도달 할 수 없거나 시간이 초과 operationStatusCode되거나 네트워크가 없으면이 됩니다 -1009.
  • 당신이 작업 큐에 취소하는 경우가 operationStatusCode있을 것입니다 -999.

다른 모든 NSError코드와 설명은 Apple 문서 에서 확인할 수 있습니다.


7

Swift 3으로 상태 코드를 얻을 수있었습니다.

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

0

그것은 나를 위해 일합니다 귀하의 요청에 아래 줄을 추가하십시오

manager.requestSerializer = [AFJSONRequestSerializer 시리얼 라이저];

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.