web-dev-qa-db-fra.com

Gérer les cookies HTTP sur iPhone

Je souhaite porter une application python qui utilise la mécanisation pour l'iPhone. Cette application doit se connecter à une page Web et utiliser le cookie du site pour accéder à d'autres pages de ce site pour obtenir des données.

Avec mon python que j'utilisais mécaniser pour la gestion automatique des cookies. Existe-t-il quelque chose de similaire pour Objective C qui est portable sur l'iPhone?

Merci pour toute aide.

34
dan

NSURLConnection vous offre la gestion des cookies gratuitement. À partir du Guide de programmation du système de chargement d'URL :

Le système de chargement d'URL envoie automatiquement tous les cookies stockés appropriés pour une NSURLRequest. sauf si la demande spécifie de ne pas envoyer de cookies. De même, les cookies retournés dans une NSURLResponse sont acceptés conformément à la politique d'acceptation des cookies en vigueur.

72
Steve Madsen

Vous pouvez utiliser la classe NSURLConnection pour effectuer une demande HTTP de connexion au site Web et récupérer le cookie. Pour effectuer une demande, créez simplement une instance de NSURLConnection et affectez-lui un objet délégué.

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

Ensuite, implémentez une méthode déléguée.

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

Conservez ou copiez la chaîne des cookies. Lorsque vous souhaitez effectuer une autre demande, ajoutez-la à votre en-tête HTTP de votre instance NSURLRequest.

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

La réponse de @ zonble ne fonctionne que dans mon localhost; Si le serveur ne fonctionne pas localement, l'en-tête "Set-Cookie" est manquant dans les champs NSDictionary * = [HTTPResponse allHeaderFields];

Enfin, j'ai trouvé que la solution de @ benzado fonctionne bien. Voir aussi: iphone nsurlconnection read cookies @Tal Bereznitskey's answer.

0
Ranger Way