2010-01-13 11 views
34

Desidero eseguire il porting di un'app python che utilizza mechanize per l'iPhone. Questa app deve accedere a una pagina Web e utilizzare il cookie del sito per accedere ad altre pagine del sito per ottenere alcuni dati.Gestione dei cookie HTTP su iPhone

Con la mia app python stavo usando mechanize per la gestione automatica dei cookie. C'è qualcosa di simile per Objective C che è portatile per iPhone?

Grazie per qualsiasi aiuto.

+1

Un'app * Python *? 'WWW :: Mechanize' è una libreria Perl. –

+3

C'è anche una porta Python. http://wwwsearch.sourceforge.net/mechanize/ – dan

risposta

72

NSURLConnection fornisce la gestione dei cookie gratuitamente. Da URL Loading System Programming Guide:

Il sistema di caricamento degli URL invia automaticamente tutti i cookie memorizzati appropriati per un NSURLRequest. a meno che la richiesta specifichi di non inviare cookies. Allo stesso modo, i cookie restituiti in un NSURLResponse sono accettati in conformità con la politica di accettazione dei cookie corrente.

+4

+1 Questa dovrebbe essere la risposta giusta. –

+0

Come faccio a verificare se un NSURLRequest invia con i cookie però? come accedere alla console? – trillions

+3

Vedere '- [NSHTTPCookieStorage cookiesForURL:]'. –

43

È possibile utilizzare la classe NSURLConnection per eseguire una richiesta HTTP per accedere al sito Web e recuperare il cookie. Per eseguire una richiesta, è sufficiente creare un'istanza di NSURLConnection e assegnarvi un oggetto delegato.

NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.google.com/"]]; 
NSURLConnection *connection = [NSURLConnection connectionWithRequest:request delegate:self]; 

Quindi, implementare un metodo delegato.

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response 
{ 
    NSHTTPURLResponse *HTTPResponse = (NSHTTPURLResponse *)response; 
    NSDictionary *fields = [HTTPResponse allHeaderFields]; 
    NSString *cookie = [fields valueForKey:@"Set-Cookie"]; // It is your cookie 
} 

Conservare o copiare la stringa di cookie. Quando si desidera eseguire un'altra richiesta, aggiungerla all'intestazione HTTP dell'istanza NSURLRequest.

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://www.google.com/"]]; 
[request addValue:cookie forHTTPHeaderField:@"Cookie"]; 
+26

Non è necessario eseguire questa operazione, NSURLConnection memorizza e invia automaticamente i cookie a meno che l'utente non lo dica esplicitamente. – benzado

+1

Anche se non dovrebbe essere necessario correggere un bug sospetto in iOS 4.2GM –

+0

Come si può rilevare che una sessione è scaduta lato client? Quale callback dovremmo aspettarci? O si tratta solo di verificare se la richiesta (con quell'ID di sessione) è riuscita o meno? – Cole

0

@ la risposta di zonble funziona solo nel mio localhost; Se il server non è in esecuzione localmente, manca l'intestazione "Set-Cookie" dai campi NSDictionary * = [HTTPResponse allHeaderFields];

Infine ho trovato che la soluzione di benzado funziona correttamente. Vedere anche: iphone nsurlconnection read cookies @Tal Risposta di Bereznitskey.

Problemi correlati