为NSURLRequest创建一个cookie?

Mic*_*ich 23 iphone cocoa cocoa-touch

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

 +(id)cookieWithProperties:(NSDictionary *)properties
Run Code Online (Sandbox Code Playgroud)

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

任何关于此的示例,文档或想法将不胜感激.

jm.*_*jm. 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];
Run Code Online (Sandbox Code Playgroud)


Jor*_*dan 19

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

 NSDictionary *properties = [NSDictionary dictionaryWithObjectsAndKeys:
                              url, NSHTTPCookieOriginURL,
                              @"testCookies", NSHTTPCookieName,
                              @"1", NSHTTPCookieValue,
                              nil];
  NSHTTPCookie *cookie = [NSHTTPCookie cookieWithProperties:properties];
Run Code Online (Sandbox Code Playgroud)

在上面的例子: url,testCookies,和1的值.同样地,NSHTTPCookieOriginURL,NSHTTPCookieName,NSHTTPCookieValueNSDictionary对象,如在键-值对.

您可以使用NSDictionary和添加来设置/获取属性NSHTTPCookie.

  • 实际上,我无法使用NSHTTPCookieDomain和NSHTTPCookiePath.见jm的答案.另外:http://lists.apple.com/archives/Webkitsdk-dev/2003/Sep/msg00003.html (4认同)

小智 7

我无法让它工作.

然而,我得到了它的工作:

NSMutableURLRequest* ret = [NSMutableURLRequest requestWithURL:myURL];
[ret setValue:@"myCookie=foobar" forHTTPHeaderField:@"Cookie"];
Run Code Online (Sandbox Code Playgroud)


Ser*_*hiy 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];
Run Code Online (Sandbox Code Playgroud)