2012-09-10 11 views
14

Estoy tratando de averiguar cómo leer los encabezados de respuesta de una solicitud de AFNetworking?Leyendo los encabezados de respuesta de AFNetworking

¿Es posible en el siguiente fragmento, o tengo que tomar otro enfoque?

// Create client 
AFHTTPClient *client = [[AFHTTPClient alloc] initWithBaseURL:[NSURL URLWithString:@"http://example.com/"]]; 

// Send request 
[client getPath:@"/test" parameters:nil success:^(AFHTTPRequestOperation *operation, id response) { 

} failure:^(AFHTTPRequestOperation *operation, NSError *error){ 

}]; 
+0

Tal vez ¿el encabezado que necesita puede extraer del objeto de respuesta? Debe convertir el objeto de respuesta en un objeto NSHTTPURLResponse para obtener valores como el código de estado HTTP. También tiene un método llamado '-allHeaderFields'. Más información aquí: https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSHTTPURLResponse_Class/Reference/Reference.html –

+0

No creo que esto sea correcto ya que el objeto de respuesta a lo que se refiere es a la respuesta de la solicitud y no necesariamente a una instancia de NSHTTPURLResponse. –

Respuesta

35

La forma más sencilla de lograr esto es utilizar la propiedad de respuesta (no el objeto de respuesta del bloque) de la instancia AFHTTPRequestOperation que está disponible tanto en el éxito y el fracaso bloques.

Este objeto de respuesta es una instancia de NSHTTPURLResponse y puede enviarle un mensaje de allHeaderFields para recuperar todos los encabezados de su solicitud.

+0

¡Perfecto! Esto lo resolvió para mí, ¡gracias! En mi caso [[respuesta de operación] allHeaderFields] me consiguió lo que quería – lix

+2

Esto es un poco opaco. ¿Alguno de ustedes quisiera ampliar este tema, quizás explicando un poco la mecánica? Como alguien nuevo en AFNetworking, tengo algunas dificultades para entender cómo acceder al estado de accesibilidad e implementar el código apropiado. – AMayes

+6

Si alguien se pregunta cómo hacerlo: aquí está el dicho objeto 'AFHTTPRequestOperation' como' operación AFHTTPRequestOperation *. Y para obtener la información del encabezado http, declare una variable de 'NSDictionary' y' operation.response.allHeaderFields'. Luego puede imprimirlo usando 'NSLog' como este,' dictionary.description'. – Isuru

4

yo no era capaz de resolverla por [[operation response] allHeaderFields] o operation.response.allHeaderFields, ya que dio error de compilación.

acabo typecasted a (NSDictionary *) y acceder a los valores clave como

[[(NSDictionary *)operation valueForKey: @"response"] valueForKey: @"allHeaderFields"]

+0

Dado que SO no permitirá las ediciones de menos de 7 caracteres, la errata anterior no se puede corregir. ¿Qué tonto es eso? –

+1

@KenThompson solo agrega algunos espacios en algún lugar del contenido ... – brandonscript

6

En pocas palabras, ya que la respuesta aceptada no tiene realmente un ejemplo:

[operationInstance setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { 
     NSLog(@"%@", operation.response.allHeaderFields); 
}]; 
0
NSDictionary *responseheaders = [HTTPResponse allHeaderFields]; 
NSString *newtoken = [responseheaders valueForKey:@"Authorization"]; 
Cuestiones relacionadas