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]);
}];
MonkeyBonkey
fonte

Respostas:

136

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

failure:^(AFHTTPRequestOperation *operation, NSError *error){ 
       NSLog(@"error code %d",[operation.response statusCode]);
}];
MonkeyBonkey
fonte
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.

Sam
fonte
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);
}
swapnilagarwal
fonte
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

c0deslayer
fonte
7

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

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

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

manager.requestSerializer = [AFJSONRequestSerializer serializer];


fonte