2010-01-13 44 views
34

我想移植一个使用iPhone机械化的python应用程序。这个应用程序需要登录到一个网页,并使用该网站的cookie转到该网站上的其他页面来获取一些数据。管理iPhone上的HTTP Cookie

随着我的python应用程序,我使用自动cookie管理机械化。对于可移植到iPhone的Objective C,有没有类似的东西?

感谢您的任何帮助。

+1

A * Python * app? 'WWW :: Mechanize'是一个Perl库。 –

+3

还有一个python端口。 http://wwwsearch.sourceforge.net/mechanize/ – dan

回答

72

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

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

+4

+1这应该是正确的答案。 –

+0

如何检查NSURLRequest是否使用Cookie发送?如何将其记录到控制台? – trillions

+3

请参阅' - [NSHTTPCookieStorage cookiesForURL:]'。 –

43

您可以使用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"]; 
+26

你不需要这样做,NSURLConnection会自动存储并发送cookie,除非你明确地告诉它不要。 – benzado

+1

即使这不应该是必要的修复iOS 4.2GM –

+0

中的可疑错误如何检测到Session已经过期客户端?我们应该期待什么回调?还是仅仅是检查请求(使用该会话ID)是否成功? – Cole

0

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

最后我发现@ benzado的解决方案工作正常。 另请参阅:iphone nsurlconnection read cookies @Tal Bereznitskey的回答。