2010-01-13 78 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的回答。