2009-03-27 7 views
23

J'essaie d'envoyer une chaîne d'authentification via cookie dans un NSMutableURLRequest. Je suis en train de créer le NSHTTPCookie parCréer un cookie pour NSURLRequest?

+(id)cookieWithProperties:(NSDictionary *)properties 

Mais nulle part ai-je pu trouver comment spécifier les propriétés autres que la simple paire clé-valeur que j'ai pour l'authentification. Lorsque je n'utilise que ma paire clé-valeur, nil est renvoyé. Tous les exemples, documentation ou réflexions à ce sujet seraient grandement appréciés.

+0

Veuillez poster le code que vous utilisez pour créer le cookie; avez-vous jeté un coup d'oeil à http://developer.apple.com/DOCUMENTATION/Cocoa/Reference/Foundation/Classes/NSHTTPCookie_Class/Reference/Reference.html#//apple_ref/doc/uid/20001702-425346 – sbooth

Répondre

19

Voici comment vous définissez les propriétés dans un cookie:

NSDictionary *properties = [NSDictionary dictionaryWithObjectsAndKeys: 
           url, NSHTTPCookieOriginURL, 
           @"testCookies", NSHTTPCookieName, 
           @"1", NSHTTPCookieValue, 
           nil]; 
    NSHTTPCookie *cookie = [NSHTTPCookie cookieWithProperties:properties]; 

Dans l'exemple ci-dessus: url, testCookies et 1 sont les valeurs . De même, NSHTTPCookieOriginURL, NSHTTPCookieName, NSHTTPCookieValue sont les touches pour l'objet NSDictionary, comme dans les paires valeur/clé.

Vous définissez/obtenez des propriétés en utilisant NSDictionary et ajoutez à NSHTTPCookie.

+4

En fait, je n'étais pas capable de le faire fonctionner, seulement avec NSHTTPCookieDomain, et NSHTTPCookiePath. Voir la réponse de jm. Aussi: http://lists.apple.com/archives/Webkitsdk-dev/2003/Sep/msg00003.html – mfazekas

+0

J'ai été capable d'utiliser NSHTTPCookieOriginURL aussi longtemps que j'ai * également * spécifié NSHTTPCookiePath (merci à jm ci-dessous pour l'indice) . Notez que vous pouvez utiliser la méthode path sur l'URL pour fournir la valeur (c'est-à-dire [url path]). –

37

J'ai remarqué, sur mon iphone 2.2.1, que le cookie n'a pas pu être créé si NSHTTPCookiePath n'est pas spécifié, même si elle est présentée comme « option » dans la documentation:

Alors, je :

NSDictionary *properties = [NSDictionary dictionaryWithObjectsAndKeys: 
          @"domain.com", NSHTTPCookieDomain, 
          @"/", NSHTTPCookiePath, // IMPORTANT! 
          @"testCookies", NSHTTPCookieName, 
          @"1", NSHTTPCookieValue, 
          nil]; 
NSHTTPCookie *cookie = [NSHTTPCookie cookieWithProperties:properties]; 

NSArray* cookies = [NSArray arrayWithObjects: cookie, nil]; 

NSDictionary * headers = [NSHTTPCookie requestHeaderFieldsWithCookies:cookies]; 

[request setAllHTTPHeaderFields:headers]; 
7

Je ne pouvais pas obtenir que cela fonctionne.

j'ai eu que cela fonctionne cependant:

NSMutableURLRequest* ret = [NSMutableURLRequest requestWithURL:myURL]; 
[ret setValue:@"myCookie=foobar" forHTTPHeaderField:@"Cookie"];
6

J'ai trouvé une erreur dans l'exemple de jm: NSHTTPCookiePath devrait être @"/", mais pas @"\\\\".

NSDictionary *properties = [NSDictionary dictionaryWithObjectsAndKeys: 
          @"domain.com", NSHTTPCookieDomain, 
          @"/", NSHTTPCookiePath, // IMPORTANT! 
          @"testCookies", NSHTTPCookieName, 
          @"1", NSHTTPCookieValue, 
          nil]; 
NSHTTPCookie *cookie = [NSHTTPCookie cookieWithProperties:properties]; 

NSArray* cookies = [NSArray arrayWithObjects: cookie, nil]; 

NSDictionary * headers = [NSHTTPCookie requestHeaderFieldsWithCookies:cookies]; 

[request setAllHTTPHeaderFields:headers]; 
+0

J'ai mis à jour ma réponse. Cela semble raisonnable, même si je n'ai plus d'iPhone à tester. –

0

clé NSHTTPCookiePath doit exister dans le dictionnaire lors de l'utilisation méthode

[NSHTTPCookie cookieWithProperties:dictionary] 

si l'utilisation NSHTTPCookieDomain ou NSHTTPCookieOriginURL. Et la valeur pour NSHTTPCookiePath doit être @"/" et non @"\\".

Questions connexes