2012-09-10 19 views
14

Sto cercando di capire come leggere le intestazioni di risposta da una richiesta AFNetworking?Lettura AF Intestazioni di risposta alla rete

È possibile nel seguente frammento o devo fare un altro approccio?

// 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

Forse l'intestazione di cui hai bisogno puoi estrarre dall'oggetto risposta? È necessario digitare l'oggetto risposta su un oggetto NSHTTPURLResponse per ottenere valori come il codice di stato HTTP. Ha anche un metodo chiamato '-allHeaderFields'. Maggiori informazioni qui: https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSHTTPURLResponse_Class/Reference/Reference.html –

+0

Non penso che sia giusto dal momento che l'oggetto risposta a cui ci si riferisce è la risposta della richiesta e non necessariamente un'istanza di NSHTTPURLResponse. –

risposta

35

Il modo più semplice per ottenere questo risultato è quello di utilizzare la proprietà di risposta (non l'oggetto risposta del blocco) dell'istanza AFHTTPRequestOperation che è disponibile sia il successo e blocchi fallimento.

Questo oggetto risposta è un'istanza di NSHTTPURLResponse e è possibile inviare un messaggio di allHeaderFields per recuperare tutte le intestazioni della richiesta.

+0

Perfetto! Questo l'ha risolto per me, grazie! Nel mio caso [[risposta all'operazione] allHeaderFields] mi ha ottenuto quello che volevo – lix

+2

Questo è un po 'opaco. Qualcuno di voi vorrebbe approfondire questo argomento, magari spiegando un po 'la meccanica? Come qualcuno nuovo per AFNetworking, sto avendo qualche difficoltà a capire come accedere allo stato di raggiungibilità e implementare il codice appropriato. – AMayes

+6

Se qualcuno si sta chiedendo come si fa: ecco il detto oggetto "AFHTTPRequestOperation' come operazione" AFHTTPRequestOperation * ". E per ottenere le informazioni dell'intestazione http, dichiarare una variabile di 'NSDictionary' e' operation.response.allHeaderFields'. Quindi puoi stamparlo usando 'NSLog' come questo,' dictionary.description'. – Isuru

4

non ero in grado di risolverlo da [[operation response] allHeaderFields] o operation.response.allHeaderFields, in quanto ha dato errore di compilazione.

ho appena typecasted a (NSDictionary *) e accedere ai valori chiave come

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

+0

Dato che SO non consentirà modifiche inferiori a 7 caratteri, l'errore di battitura sopra riportato non può essere corretto. Che sciocco è? –

+1

@KenThompson basta aggiungere qualche spazio da qualche parte nel contenuto ... – brandonscript

6

Molto semplicemente, dal momento che la risposta accettata in realtà non ha un esempio:

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