curl+cookie

Статус
В этой теме нельзя размещать новые ответы.

lena berkova

Местный житель
Регистрация
14 Янв 2009
Сообщения
437
Реакции
21
после долгого гугления хочу спросить- можно ли работать с куками в курле через переменную? во всех примерах используется файл.
или это фича курла?
 
Судя по мануалу Для просмотра ссылки Войди или Зарегистрируйся нельзя, хотя может я не нашел, посмотри.
Я думаю крайне важно чтобы куки сохранялись именно в файл, потому что скрипт может работать несколько раз.
 
Почему нельзя то?:D
Вот кусок рабочего кода - соответственно переменная $cookies11[$i] в дальнейшем используется

PHP:
$ch = curl_init("http://www.yahoo.com");
    curl_setopt($ch, CURLOPT_HEADER, 1);
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727)');
    curl_setopt($ch, CURLOPT_REFERER, 'http://www.google.com');
    curl_setopt($ch, CURLOPT_TIMEOUT, 10);
    //curl_setopt($ch, CURLOPT_PROXY, $proxy[$i]);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $res1[$i] = curl_exec($ch);
    curl_close ($ch);

preg_match('|Cookie:(.*);|U', $res1[$i],$mat);
$cookies11[$i]=$mat[0];
 
Почему нельзя то?:D
Вот кусок рабочего кода - соответственно переменная $cookies11[$i] в дальнейшем используется
PHP:
$ch = curl_init("http://www.yahoo.com");
    curl_setopt($ch, CURLOPT_HEADER, 1);
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727)');
    curl_setopt($ch, CURLOPT_REFERER, 'http://www.google.com');
    curl_setopt($ch, CURLOPT_TIMEOUT, 10);
    //curl_setopt($ch, CURLOPT_PROXY, $proxy[$i]);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $res1[$i] = curl_exec($ch);
    curl_close ($ch);
preg_match('|Cookie:(.*);|U', $res1[$i],$mat);
$cookies11[$i]=$mat[0];
еще неплохо бы переменную $cookies через implode() пропустить
 
Я тоже поначалу парсил куки из заголовка. Но, как оказалось, это в корне неверно.

Это не будет работать, если, допустим, вы отсылаете запрос сайту, он ставит вам куки и перенаправляет вас на другую страницу (напимер, 302ым или 301ым редиректом). В это случае куки никуда не запишутся до того, как мы не перейдем на конечный сайт. Ну и собсно нифига работать не будет. Можете увидеть это на примере регистрации/логина на gmail.com.

Поэтому, если вы хотите хранить куки в переменной, то вам нужно выставить:

PHP:
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);

и самим реализовать редирект.

Кстати, в кодах выше не забудьте

PHP:
curl_setopt($ch, CURLOPT_COOKIE, $cookies);

а то толку будет мало ;)
 
Я тоже поначалу парсил куки из заголовка. Но, как оказалось, это в корне неверно.
Это не будет работать, если, допустим, вы отсылаете запрос сайту, он ставит вам куки и перенаправляет вас на другую страницу (напимер, 302ым или 301ым редиректом). В это случае куки никуда не запишутся до того, как мы не перейдем на конечный сайт. Ну и собсно нифига работать не будет. Можете увидеть это на примере регистрации/логина на gmail.com.
Поэтому, если вы хотите хранить куки в переменной, то вам нужно выставить:
PHP:
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
и самим реализовать редирект.
Кстати, в кодах выше не забудьте
PHP:
curl_setopt($ch, CURLOPT_COOKIE, $cookies);
а то толку будет мало ;)
Почему не верно?
Работает все даже в гмаил. Редирект тут не причем.
Не нужно FOLLOWLOCATION, false
Хотя конечно проще делать так:
PHP:
curl_setopt($cUrl, CURLOPT_COOKIEJAR, "cookie.txt");
curl_setopt($cUrl, CURLOPT_COOKIEFILE, "cookie.txt");
 
вообще-то куки отправляются вместе с http запросом в заголовках

Если хочется работать с ними не через файл -- смотри
CURLOPT_COOKIE -- сюда в строку загоняются куки
CURLOPT_COOKIE: Содержимое заголовка "Cookie: ", который будет отправлен с HTTP запросом.

или
CURLOPT_HTTPHEADER: Массив с HTTP заголовками.
 
Почему не верно?
Работает все даже в гмаил. Редирект тут не причем.
Не нужно FOLLOWLOCATION, false
Хотя конечно проще делать так:
PHP:
curl_setopt($cUrl, CURLOPT_COOKIEJAR, "cookie.txt");
curl_setopt($cUrl, CURLOPT_COOKIEFILE, "cookie.txt");

А вы проверяли? Я проверил - все как pori написал. Не пишутся куки по-нормальному при curl'овском редиректе, это даже логично. Если у вас все работает, то приведите код авторизации на gmail (или любого другого сайта с аналогичной авторизацией).


вообще-то куки отправляются вместе с http запросом в заголовках
Если хочется работать с ними не через файл -- смотри
CURLOPT_COOKIE -- сюда в строку загоняются куки
или

Это уже было написано выше. Дело не в том, чтобы их запихнуть в заголовки, а скорее в том, что их нужно еще и самому из заголовков распарсить.
 
и в чем проблема с парсингом ?
уже посоветовали CURLOPT_HEADER в 1 установить
 
и в чем проблема с парсингом ?
уже посоветовали CURLOPT_HEADER в 1 установить

Хм... Вы не поняли... Попробую объяснить на пальцах. Вот смотрите:

Есть сайт с авторизацией. Авторизация проходит так:

1. юзер заходит на url1 и вбивает логин/пароль
2. происходит отправка формы с передачей информации по авторизации на url2
3. на url2 ставятся куки и происходит редирект на url3 с помощью Location в заголовке
4. на url3 обрабатываются куки полученные ранее

Так вот, если в курле стоит

PHP:
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

то сохранить в переменную куки не получится, так как курл выдаст уже конечную страницу url3 вместе с заголовками url2, а не промежуточные заголовки страницы url2 с нужными нам куками.

Поэтому придется куки парсить и заного отрпавлять запрос на url3 вручную.

Теперь, надеюсь, понятно объяснил?

PS: такая авторизация на gmail'е
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху