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

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

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

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



답변

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

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


답변

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

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

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


답변

AFNetworking 3.0 의 경우

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


답변

NSInteger operationStatusCode = [operation.error 코드];

NSInteger httpStatusCode = operation.response.statusCode;

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

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

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

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


답변

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

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


답변

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

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


답변