Управление HTTP-файлами cookie на iPhone - PullRequest
34 голосов
/ 13 января 2010

Я хочу портировать приложение на python, которое использует механизацию для iPhone. Это приложение должно войти на веб-страницу и использовать файл cookie сайта для перехода на другие страницы этого сайта для получения некоторых данных.

В моем приложении на python я использовал Mechanize для автоматического управления файлами cookie. Есть ли что-то похожее для Objective C, переносимое на iPhone?

Спасибо за любую помощь.

Ответы [ 3 ]

72 голосов
/ 20 апреля 2010

NSURLConnection дает вам управление файлами cookie бесплатно. Из Руководства по программированию системы загрузки URL :

Система загрузки URL автоматически отправляет любые сохраненные файлы cookie, подходящие для NSURLRequest. если в запросе не указано, что куки не отправляются. Аналогично, cookie-файлы, возвращенные в NSURLResponse, принимаются в соответствии с текущей политикой принятия cookie-файлов.

44 голосов
/ 16 марта 2010

Вы можете использовать класс 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"];
0 голосов
/ 27 июля 2015

@ ответ zonble работает только на моем локальном хосте; Если сервер не работает локально, заголовок «Set-Cookie» отсутствует в NSDictionary * fields = [HTTPResponse allHeaderFields];

Наконец-то я обнаружил, что решение @ benzado работает нормально. См. Также: iphone nsurlconnection читает куки @ Ответ Тала Березницкого.

...