existe uma maneira fácil de obter o código de status http no bloco de falha do AFHTTPClient?


94

Vejo que há uma lista de códigos de status de http aceitos que posso modificar, mas acho que seria mais claro se eu pudesse obter o código de status de http no bloco de falha.

Ok, encontrei a resposta com o objeto de operação

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

Respostas:


136

Ok, encontrei a resposta com o objeto de operação

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

Isso também pode ser útil[operation.request HTTPMethod]
defvol

2
Eu sei que isso é antigo, mas @wilhelmbot - HTTPMethod forneceria algo como GET / POST / PUT ... etc, provavelmente não é útil para verificar o status da resposta.
shortstuffsushi

111

Em versões mais recentes do AFNetworking, você pode recuperar o objeto de resposta do erro:

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

Isso é útil se você estiver tratando de erros mais adiante na linha e não quiser passar o objeto de resposta.


Você pode precisar obter o erro subjacente primeiro. NSError *underlyingError = error.userInfo[@"NSUnderlyingError"]
Onato,

19

Para AFNetworking 3.0 , use

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

13

NSInteger operationStatusCode = [operation.error code];

NSInteger httpStatusCode = operation.response.statusCode;

Se os pedidos foram cancelados / inacessíveis / timeout, httpStatusCodeserá sempre 0.

Como alternativa, você pode identificar o problema entendendo o operationStatusCode. É um NSErrorobjeto.

  • Se não puder atingir / tempo limite / nenhuma rede para processar a solicitação, o operationStatusCodeserá -1009.
  • Se você cancelar a fila de operações, o operationStatusCodeserá -999.

Você pode verificar todos os outros NSErrorcódigos e suas descrições na documentação da Apple


7

Consegui obter o código de status com o Swift 3:

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

0

É trabalho para mim Adicione a linha abaixo à sua solicitação

manager.requestSerializer = [AFJSONRequestSerializer serializer];

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.