Управление HTTP-файлами cookie на iPhone
Я хочу портировать приложение Python, которое использует механизировать для iPhone. Это приложение должно войти на веб-страницу и использовать cookie-файл сайта для перехода на другие страницы этого сайта для получения некоторых данных.
В моем приложении на python я использовал Mechanize для автоматического управления файлами cookie. Есть ли что-то похожее для Objective C, переносимое на iPhone?
Спасибо за любую помощь.
3 ответа
NSURLConnection
gives you cookie management for free. From the URL Loading System Programming Guide:
Система загрузки URL автоматически отправляет любые сохраненные куки, подходящие для NSURLRequest. если в запросе не указано, что файлы cookie не отправляются. Аналогичным образом, cookie-файлы, возвращаемые в NSURLResponse, принимаются в соответствии с текущей политикой принятия cookie-файлов.
Вы можете использовать класс 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. Если вы хотите выполнить другой запрос, добавьте его в HTTP-заголовок вашего экземпляра NSURLRequest.
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://www.google.com/"]];
[request addValue:cookie forHTTPHeaderField:@"Cookie"];
Ответ @zonble работает только на моем локальном хосте; Если сервер не работает локально, заголовок "Set-Cookie" отсутствует в NSDictionary *fields = [HTTPResponse allHeaderFields];
Наконец я обнаружил, что решение @benzado работает нормально. Также смотрите: iphone nsurlconnection прочитайте куки @ Ответ Тала Березницкого.