¿Existe una manera fácil de obtener el código de estado http en el bloque de fallas de AFHTTPClient?

94

Veo que hay una lista de códigos de estado http aceptados que puedo modificar, pero creo que sería más limpio si pudiera obtener el código de estado http en el bloque de fallas.

Ok, encontré la respuesta con el objeto de operación

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

Respuestas:

136

Ok, encontré la respuesta con el objeto de operación

failure:^(AFHTTPRequestOperation *operation, NSError *error){ 
       NSLog(@"error code %d",[operation.response statusCode]);
}];
MonoBonkey
fuente
Esto también podría ser útil[operation.request HTTPMethod]
defvol
2
Sé que esto es antiguo, pero @wilhelmbot - HTTPMethod le daría algo como GET / POST / PUT ... etc, probablemente no sea útil para verificar el estado de la respuesta.
shortstuffsushi
111

En las versiones más recientes de AFNetworking, puede recuperar el objeto de respuesta del error:

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

Esto es útil si está haciendo un manejo de errores más arriba en la línea y no quiere pasar el objeto de respuesta.

Sam
fuente
Es posible que primero deba obtener el error subyacente. NSError *underlyingError = error.userInfo[@"NSUnderlyingError"]
Onato
19

Para AFNetworking 3.0 , utilice

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

NSInteger operationStatusCode = [operation.error code];

NSInteger httpStatusCode = operation.response.statusCode;

Si las solicitudes fueron canceladas / inaccesibles / timeout, httpStatusCodeserá siempre 0.

Alternativamente, puede identificar el problema entendiendo el operationStatusCode. Es un NSErrorObjeto.

  • Si no puede alcanzar / tiempo de espera / no hay red para procesar la solicitud, operationStatusCodeserá -1009.
  • Si cancela la cola de operaciones operationStatusCode, será -999.

Puede consultar todos los demás NSErrorcódigos y sus descripciones en la documentación de Apple

c0deslayer
fuente
7

Pude obtener el código de estado con Swift 3:

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

Es un trabajo para mí Agregue la siguiente línea a su solicitud

manager.requestSerializer = [serializador AFJSONRequestSerializer];


fuente