为NSURLRequest创建一个cookie?

时间:2009-03-27 23:01:25

标签: iphone cocoa cocoa-touch

我正在尝试通过NSMutableURLRequest中的cookie发送身份验证字符串。我正在尝试通过

创建NSHTTPCookie
 +(id)cookieWithProperties:(NSDictionary *)properties

但是我无处可寻找如何指定除了我用于身份验证的简单键值对之外的属性。当我只使用我的键值对时,返回nil。

非常感谢任何关于此的示例,文档或想法。

5 个答案:

答案 0 :(得分:38)

我注意到,在我的2.2.1 iphone上,如果未指定NSHTTPCookiePath,则cookie未创建,即使它在文档中显示为“可选”:

所以,我这样做:

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];

答案 1 :(得分:19)

这是您在cookie中设置属性的方法:

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

在上面的例子中:  urltestCookies1。同样,NSHTTPCookieOriginURLNSHTTPCookieNameNSHTTPCookieValueNSDictionary对象的与键值对 >。

您使用NSDictionary设置/获取属性,然后添加到NSHTTPCookie

答案 2 :(得分:7)

我无法让它发挥作用。

然而,我得到了这个:

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

答案 3 :(得分:6)

我在jm的例子中发现了一个错误:NSHTTPCookiePath应该是@"/",而不是@"\\\\"

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];

答案 4 :(得分:0)

使用

时,

NSHTTPCookiePath应该存在于字典中

[NSHTTPCookie cookieWithProperties:dictionary]

使用NSHTTPCookieDomain还是NSHTTPCookieOriginURL的方法。 NSHTTPCookiePath的值应为@"/"而不是@"\\"