web-dev-qa-db-ja.com

iPhoneでのHTTP Cookieの管理

IPhoneにmechanizeを使用するpythonアプリを移植します。このアプリは、ウェブページにログインし、サイトCookieを使用してそのサイトの他のページにアクセスしてデータを取得する必要があります。

私のpythonアプリで、自動Cookie管理にmechanizeを使用していました。iPhoneに移植可能なObjective Cでも同様のものはありますか?

助けてくれてありがとう。

34
dan

NSURLConnection は、Cookieの管理を無料で提供します。 RL Loading System Programming Guide から:

URL読み込みシステムは、NSURLRequestに適した保存されたCookieを自動的に送信します。リクエストでCookieを送信しないように指定されている場合を除きます。同様に、NSURLResponseで返されたCookieは、現在のCookie受け入れポリシーに従って受け入れられます。

72
Steve Madsen

NSURLConnectionクラスを使用して、HTTP要求を実行してWebサイトにログインし、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"];
44
zonble

@zonbleの答えは、私のローカルホストでのみ機能します。サーバーがローカルで実行されていない場合、NSDictionary * fields = [HTTPResponse allHeaderFields];から「Set-Cookie」ヘッダーが欠落しています。

最後に、@ benzadoのソリューションが正常に機能することがわかりました。次も参照してください: iphone nsurlconnection read cookies @Tal Bereznitskeyの答え。

0
Ranger Way