afhttprequestoperation - afnetworking 3
¿Hay alguna manera fácil de obtener el código de estado http en el bloque de falla de AFHTTPClient? (6)
NSInteger operationStatusCode = [código de operación.error];
NSInteger httpStatusCode = operation.response.statusCode;
Si las solicitudes fueron canceladas / inalcanzables / expiradas, httpStatusCode
siempre será 0
.
Alternativamente, puede identificar el problema entendiendo el operationStatusCode
. Es un objeto NSError
.
- Si no puede alcanzar / agotar el tiempo / sin red para procesar la solicitud,
operationStatusCode
será-1009
. - Si cancela la cola de
operationStatusCode
,operationStatusCode
será-999
.
Puede verificar todos los demás códigos NSError
y sus descripciones en la documentación de Apple
Veo que hay una lista de códigos de estado HTTP aceptados que puedo modificar, pero creo que sería más claro si puedo 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]);
}];
Pude obtener el código de estado con Swift 3:
((error.userInfo[AFNetworkingOperationFailingURLResponseErrorKey])
as! HTTPURLResponse).statusCode
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á manejando errores más adelante en la línea y no quiere pasar el objeto de respuesta.
Es trabajo para mí Añadir la línea a continuación a su solicitud
manager.requestSerializer = [serializador de AFJSONRequestSerializer];
Ok, encontré la respuesta con el objeto de operación
failure:^(AFHTTPRequestOperation *operation, NSError *error){
NSLog(@"error code %d",[operation.response statusCode]);
}];
Para AFNetworking 3.0 , use
failure:^(NSURLSessionTask *operation, NSError *error) {
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)operation.response;
httpResponse.statusCode;
NSLog(@"status code: %li", (long)httpResponse.statusCode);
}