34

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

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

谢谢你的帮助。

4

3 回答 3

72

NSURLConnection免费为您提供 cookie 管理。从URL 加载系统编程指南

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

于 2010-04-20T15:29:52.837 回答
44

您可以使用 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"];
于 2010-03-16T18:26:50.157 回答
0

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

最后我发现@benzado 的解决方案很好用。另请参阅:iphone nsurlconnection 读取 cookie @Tal Bereznitskey 的答案。

于 2015-07-27T08:28:02.807 回答