2009-03-27 11 views
23

Estoy tratando de enviar una cadena de autenticación a través de una cookie en NSMutableURLRequest. Estoy tratando de crear el NSHTTPCookie travésCrea una cookie para NSURLRequest?

+(id)cookieWithProperties:(NSDictionary *)properties 

Pero tienen a donde yo sido capaz de encontrar la forma de especificar las propiedades que no sean la simple par clave-valor que tengo para la autenticación. Cuando solo uso mi par clave-valor, se devuelve nil.

Cualquier ejemplo, documentación o comentario al respecto sería muy apreciado.

+0

Publique el código que está utilizando para crear la cookie; echas un vistazo a http://developer.apple.com/DOCUMENTATION/Cocoa/Reference/Foundation/Classes/NSHTTPCookie_Class/Reference/Reference.html#//apple_ref/doc/uid/20001702-425346 – sbooth

Respuesta

19

Esta es la forma de establecer las propiedades en una cookie:

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

En el ejemplo anterior: url, testCookies y 1 son los valores . Del mismo modo, NSHTTPCookieOriginURL, NSHTTPCookieName, NSHTTPCookieValue son las claves para el objeto NSDictionary, como en pares de valores clave.

Establece/obtiene propiedades usando NSDictionary y agrega a NSHTTPCookie.

+4

En realidad, no estaba capaz de hacer que funcione, solo con NSHTTPCookieDomain y NSHTTPCookiePath. Ver la respuesta de jm. También: http://lists.apple.com/archives/Webkitsdk-dev/2003/Sep/msg00003.html – mfazekas

+0

Pude usar NSHTTPCookieOriginURL siempre y cuando * también * especifique NSHTTPCookiePath (gracias a jm a continuación para la sugerencia) . Tenga en cuenta que puede usar el método de ruta en la url para proporcionar el valor (es decir, [ruta url]). –

37

me di cuenta en, en mi iPhone 2.2.1, que la cookie no se crean si no se especifica NSHTTPCookiePath, a pesar de que se muestra como "opcional" en la documentación:

lo tanto, yo :

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

No pude hacer que funcione.

que tiene esto funcione sin embargo:

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

He encontrado un error en el ejemplo de JM: NSHTTPCookiePath debe ser @"/", pero no @"\\\\".

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

Actualicé mi respuesta. Parece razonable, aunque ya no tengo un iphone para probar. –

0

clave NSHTTPCookiePath debe existir en el diccionario cuando se utiliza el método

[NSHTTPCookie cookieWithProperties:dictionary] 

si el uso de NSHTTPCookieDomain o NSHTTPCookieOriginURL. Y el valor para NSHTTPCookiePath debe ser @"/" no @"\\".

Cuestiones relacionadas