IPhoneにmechanizeを使用するpythonアプリを移植します。このアプリは、ウェブページにログインし、サイトCookieを使用してそのサイトの他のページにアクセスしてデータを取得する必要があります。
私のpythonアプリで、自動Cookie管理にmechanizeを使用していました。iPhoneに移植可能なObjective Cでも同様のものはありますか?
助けてくれてありがとう。
NSURLConnection
は、Cookieの管理を無料で提供します。 RL Loading System Programming Guide から:
URL読み込みシステムは、NSURLRequestに適した保存されたCookieを自動的に送信します。リクエストでCookieを送信しないように指定されている場合を除きます。同様に、NSURLResponseで返されたCookieは、現在のCookie受け入れポリシーに従って受け入れられます。
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"];
@zonbleの答えは、私のローカルホストでのみ機能します。サーバーがローカルで実行されていない場合、NSDictionary * fields = [HTTPResponse allHeaderFields];から「Set-Cookie」ヘッダーが欠落しています。
最後に、@ benzadoのソリューションが正常に機能することがわかりました。次も参照してください: iphone nsurlconnection read cookies @Tal Bereznitskeyの答え。