Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Подмена кукисов парсера


Автор: BuShaRt 15.7.2007, 15:25
У меня есть парсер HTML страничек, он работает через функцию file(), просто грабя контент со странички, но возникла проблема вот с этим с одним сайто (http://baltma.ru/).
На нем есть переход на разные языки, причем, как я понял, переход осуществляеться через пометку в кукисах, при этом ссылка остаеться той же, что и для других языков...
Проблема в том, что функция file() грабит только русскую версию. Реально ли сделать так, чтоб я мог автоматизировать парсер и на иноязычные версии?

Автор: Golda 15.7.2007, 15:44
Самое простое, на мой взгляд - использовать CURL и там, для подхвата cookies настроить CURLOPT_COOKIEFILE и CURLOPT_COOKIEJAR

Автор: BuShaRt 15.7.2007, 17:21
кукисы выдрал из папочки, кинул в папку со скриптом, запустил
Код

$ch_auth = curl_init();
curl_setopt($ch_auth, CURLOPT_URL, "http://baltma.ru/");
curl_setopt($ch_auth, CURLOPT_COOKIEFILE, 'bushart.txt');
$buffer_auth = curl_exec($ch_auth);


фиг-  не работает smile

И как занести данные в переменную, не выводя их на экран?

Автор: Golda 15.7.2007, 17:36
CURLOPT_COOKIEFILE позволяет задать файл, из которого нужно брать куки для пересылки в request. Для принимаемых кук используют CURLOPT_COOKIEJAR. Нужно настроить их на один и тот же файл. Тогда тое куки, что придут в ответ на первый запрос, будут посланы при следующем запросе.

Чтобы занести в переменную, нужно использовать CURLOPT_RETURNTRANSFER

Автор: BuShaRt 15.7.2007, 18:17
Вывод заблокировался, но кукисы не жует все равно, страница как была на русском так и остаеться...
Код

$ch_auth = curl_init();
curl_setopt($ch_auth, CURLOPT_URL, "http://baltma.ru/");
curl_setopt($ch_auth, CURLOPT_COOKIEJAR, 'bushart.txt');
curl_setopt($ch_auth, CURLOPT_COOKIEFILE, 'bushart.txt');
curl_setopt($ch_auth, CURLOPT_RETURNTRANSFER, 1);
$buffer_auth = curl_exec($ch_auth);
print $buffer_auth;
curl_close($ch_auth);

Автор: BuShaRt 15.7.2007, 19:40
Цитата(Golda @  15.7.2007,  17:36 Найти цитируемый пост)
CURLOPT_COOKIEFILE позволяет задать файл, из которого нужно брать куки для пересылки в request.

так мне это и нужно, я файл с кукисами взял из кладовой ослика и мне его нужно подргрузить... В нем прописанна английская версия 100%, я даже смотрел...

Автор: Golda 16.7.2007, 08:05
А... так там cookie меняются javascript'ом. Тогда сервер их не поставит. Все равно менять вручную придется. Тогда уж проще прямо cookie задавать опцией CURLOPT_COOKIE

Код

$curl = curl_init();
curl_setopt($curl, CURLOPT_HEADER, 0);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_COOKIE, "lang=eng; expires=Thu, 13-Jul-2017 04:56:01  GMT; path=/; domain=baltma.ru");
curl_setopt($curl, CURLOPT_URL, "http://baltma.ru/"); # this is where you first time connect - GET method authorization in my case, if you have POST - need to edit code a bit
$xxx = curl_exec($curl);
if (curl_errno($curl)) {
    echo curl_error($curl);
} else {
    echo $xxx;
}
curl_close($curl);


Так должно работать. Меняйте значение lang в cookie и получайте страницу на каком хотите языке.

Если возникнут проблемы, добавьте еще на всякий случай CURLOPT_USERAGENT (некоторые сайты проверяют наличие header User-Agent). Реже, но иногда требуется CURLOPT_REFERER и (на случай, разнообрвзных пересылок) можно включить CURLOPT_FOLLOWLOCATION

Автор: BuShaRt 16.7.2007, 08:20
Golda, 
Огромное спасибо, вы меня очень выручели, я уж думал придеться все вручную перебивать smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)