34

en iOS, cómo puedo recibir el código de estado http (404,500 200, etc.) para obtener una respuesta de un servidor web. Supongo que está en NSUrlConnectionDelegate.NSUrlConnectionDelegate - Obtener códigos de estado http

Objective-C o Monotouch .NET answer ok.

+1

duplicado Posible de http://stackoverflow.com/questions/4938010/how-do-i-check-an-http-request-response-status-code-from-ios. – csano

+0

Pregunta editada para solicitar Monotouch –

Respuesta

87

Sí, se puede obtener el código de estado en -didRecieveResponse método delegado:

- (void) connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{ 
    NSHTTPURLResponse* httpResponse = (NSHTTPURLResponse*)response; 
    int code = [httpResponse statusCode]; 
} 
+2

Tenga en cuenta que, a pesar del uso de la notación de puntos, el estadoCódigo no es una propiedad. – albertamg

+2

@albertamg, oops de hecho ... gracias, corregirá eso para evitar confusiones – Vladimir

+2

Me doy cuenta de que esto es obvio, pero lo notaré solo por el hecho de estar completo: en cualquier otro lugar que obtenga un 'NSURLResponse' en respuesta a un Solicitud de HTTP (como el controlador de finalización de 'sendAsynchronousRequest: queue: completionHandler:', puede convertir el 'NSURLResponse' a un' NSHTTPURLResponse' exactamente de la misma manera. –

11
NSHTTPURLResponse* urlResponse = nil; 
NSError *error = nil; 
responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&urlResponse error:&error]; 

La solicitud asíncrona también debe tener una manera de conseguir la NSHTTPURLResponse ..

Usted recibe el código de estado de esta manera:

int statusCode = [urlResponse statusCode]; 
int errorCode = error.code; 

En el caso de algunos códigos de error muy utilizados (como 404), será g e ingrese el error pero con un código diferente (401 será -1012).

+1

No hay necesidad de asignar el error - simplemente verifique si el error no es nulo en el retorno - si no es así, debería tener un código de error – gheese

+0

Gracias a montones, eso me ayudó. Gracias por el 401, porque el error que estaba tratando de atrapar. error.code = -1012 como dijiste. –

+0

Me ayudó mucho, ¡gracias! – Daniel

1

En cuanto a this other stackoverflow question parece que puede manejar códigos de estado HTTP en el método - (void)connection:(NSURLConnection *)aConnection didReceiveResponse:(NSURLResponse *)response delegado:

- (void)connection:(NSURLConnection *)aConnection didReceiveResponse:(NSURLResponse*)response 
{ 
    if ([response isKindOfClass: [NSHTTPURLResponse class]]) 
     statusCode = [(NSHTTPURLResponse*) response statusCode]; 
} 
3

Así es como hacerlo en MonoTouch para .NET C# para los usuarios. Esto está en el NSUrlConnectionDelegate.

public override void ReceivedResponse (NSUrlConnection connection, NSUrlResponse response) 
{ 
    if (response is NSHttpUrlResponse) 
    { 
    var r = response as NSHttpUrlResponse; 
    Console.WriteLine (r.StatusCode); 
    } 
} 
Cuestiones relacionadas