2010-01-13 17 views
34

Quiero portar una aplicación de Python que utiliza mecanizar para el iPhone. Esta aplicación necesita iniciar sesión en una página web y usar la cookie del sitio para ir a otras páginas en ese sitio para obtener algunos datos.Administración de cookies HTTP en el iPhone

Con mi aplicación python estaba usando mechanize para la gestión automática de cookies. ¿Hay algo similar para Objective C que sea portátil para el iPhone?

Gracias por cualquier ayuda.

+1

A * Python * aplicación? 'WWW :: Mechanize' es una biblioteca de Perl. –

+3

También hay un puerto de python. http://wwwsearch.sourceforge.net/mechanize/ – dan

Respuesta

72

NSURLConnection le ofrece la gestión de cookies de forma gratuita. De URL Loading System Programming Guide:

El sistema de carga de URL envía automáticamente las cookies almacenadas apropiadas para una solicitud de NSURL. a menos que la solicitud especifique que no se envíen cookies. Del mismo modo, las cookies devueltas en NSURLResponse se aceptan de acuerdo con la política actual de aceptación de cookies.

+4

+1 Esta debería ser la respuesta correcta. –

+0

¿Cómo puedo verificar si una solicitud NSURL envía con cookies? cómo iniciar sesión en la consola? – trillions

+3

Ver '- [NSHTTPCookieStorage cookiesForURL:]'. –

43

Puede usar la clase NSURLConnection para realizar una solicitud HTTP para iniciar sesión en el sitio web y recuperar la cookie. Para realizar una solicitud, simplemente cree una instancia de NSURLConnection y asígnele un objeto delegado.

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

A continuación, implemente un método delegado.

- (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 
} 

Conservar o copiar la cadena de cookies. Cuando desee realizar otra solicitud, agréguela a su encabezado HTTP de su instancia de NSURLRequest.

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

No necesita hacer esto, NSURLConnection almacena y envía cookies automáticamente a menos que explícitamente le diga que no lo haga. – benzado

+1

Aunque esto no debería ser necesario, se corrigió una sospecha de error en iOS 4.2GM –

+0

¿Cómo se detectaría que una sesión ha caducado en el lado del cliente? ¿Qué devolución de llamada deberíamos esperar? ¿O solo se trata de verificar si la solicitud (con esa identificación de sesión) tuvo éxito o no? – Cole

0

@ la respuesta de zonble solo funciona en mi servidor local; Si el servidor no se está ejecutando localmente, el encabezado "Set-Cookie" no se encuentra en NSDictionary * fields = [HTTPResponse allHeaderFields];

Finalmente encontré que la solución de @benzado funciona bien. Ver también: iphone nsurlconnection read cookies @Tal Bereznitskey's answer.

Cuestiones relacionadas