【问题标题】:Managing HTTP Cookies on iPhone在 iPhone 上管理 HTTP Cookie
【发布时间】:2011-01-04 10:40:05
【问题描述】:

我想为 iPhone 移植一个使用 mechanize 的 python 应用程序。此应用需要登录网页并使用站点 cookie 转到该站点上的其他页面以获取一些数据。

在我的 python 应用程序中,我使用 mechanize 进行自动 cookie 管理。可移植到 iPhone 的 Objective C 是否有类似的东西?

感谢您的帮助。

【问题讨论】:

标签: iphone objective-c cookies www-mechanize


【解决方案1】:

您可以使用 NSURLConnection 类执行 HTTP 请求以登录网站,并检索 cookie。要执行请求,只需创建一个 NSURLConnection 实例并为其分配一个委托对象。

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

然后,实现一个委托方法。

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

保留或复制 cookie 字符串。当您想要执行另一个请求时,请将其添加到您的 NSURLRequest 实例的 HTTP 标头中。

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

【讨论】:

  • 你不需要这样做,NSURLConnection 会自动存储和发送 cookie,除非你明确告诉它不要这样做。
  • 尽管这不是必需的,但修复了 iOS 4.2GM 中的一个可疑错误
  • 如何在客户端检测到 Session 已过期?我们应该期待什么回调?还是只是检查请求(带有该会话 ID)是否成功?
【解决方案2】:

@zonble 的回答只适用于我的本地主机; 如果服务器未在本地运行,则 NSDictionary *fields = [HTTPResponse allHeaderFields]; 中缺少“Set-Cookie”标头;

最后我发现@benzado 的解决方案效果很好。 另请参阅:iphone nsurlconnection read cookies@Tal Bereznitskey 的回答。

【讨论】:

    【解决方案3】:

    NSURLConnection 为您免费提供 cookie 管理。来自URL Loading System Programming Guide

    URL 加载系统会自动发送任何适合 NSURLRequest 的存储 cookie。除非请求指定不发送 cookie。同样,在 NSURLResponse 中返回的 cookie 根据当前的 cookie 接受政策被接受。

    【讨论】:

    • 我如何检查 NSURLRequest 是否使用 cookie 发送?如何将其记录到控制台?
    • -[NSHTTPCookieStorage cookiesForURL:]
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-15
    • 1970-01-01
    • 1970-01-01
    • 2011-09-06
    • 1970-01-01
    相关资源
    最近更新 更多