2008-10-25 7 views
21

He estado tratando de averiguar cómo recibir encabezados HTTP a través de una solicitud realizada con NSURLConnection. Normalmente se hace una solicitud con algo tan simple como la siguiente:Recibir encabezados HTTP a través de NSURLRequest/NSURLConnection en Cocoa

NSURLConnection *connection = [[NSURLConnection alloc] 
    initWithRequest:request 
     delegate:self]; 

La única forma que he encontrado personalmente en abundante documentación de Apple para recibir las cabeceras de respuesta es a través de una llamada sincrónica utilizando el siguiente método de la clase NSURLConnection:

+ (NSData *)sendSynchronousRequest:(NSURLRequest *)request returningResponse:(NSURLResponse **)response error:(NSError **)error 

Aquí puedo hacer referencia fácilmente a un objeto de respuesta de tipo NSURLResponse. El problema aquí es que no estoy listo para realizar solicitudes sincrónicas a través de un dispositivo móvil, especialmente con una red con alta latencia como EDGE. ¿Es posible obtener resultados similares con el comportamiento asincrónico predeterminado de NSURLConnection?

Respuesta

42

En su delegado de conexión, agregue el método -connection:didReceiveResponse:. Si está realizando una solicitud HTTP estándar, el objeto NSURLResponse transferido será en realidad un objeto NSHTTPURLResponse y responderá al mensaje -allHeaderFields. Esto debería ser lo que estás buscando.

+0

Me di cuenta de que nuestro también. Ahora extraje un campo de encabezado que contiene más información: 'Www-Authenticate: Digest realm = \" test \ "qop = \" auth \ "'y así sucesivamente. ¿Existe la posibilidad de obtener/establecer estos detalles como dict o array adicional? –

Cuestiones relacionadas