# Netscape HTTP Cookie File
# http://curl.haxx.se/rfc/cookie_spec.html
# This file was generated by libcurl! Edit at your own risk.
www.moswar.ru FALSE / FALSE 0 PHPSESSID e1j0eb3i3h68a486blbot63nf2
www.moswar.ru FALSE / FALSE 1268050467 authkey deleted
www.moswar.ru FALSE / FALSE 1268050467 userid deleted
.moswar.ru TRUE / FALSE 1268050467 authkey deleted
.moswar.ru TRUE / FALSE 1268050467 userid deleted
cURL и куки
Постигла меня проблема залогиниться на сайте с помощью cURL да спарсить одну страничку. А чтобы залогиниться, нужно установить правильные куки. Так вот. Есть код, которым я пытаюсь залогиниться:
Код:
<?php
# данные для формирования запроса
$login = 'tratata@tratata.ru';
$pass = 'tratata';
$authurl = 'http://moswar.ru';
$agent = 'Mozilla/5.0 (Windows; U; Windows NT 6.1; ru; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5';
# массив данных для аутентификации
$logindata = array();
$logindata['action'] = 'login';
$logindata['email'] = $login;
$logindata['password'] = $pass;
# подрубаемся
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $authurl);
curl_setopt($ch, CURLOPT_USERAGENT, $agent);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($logindata));
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');
$data = curl_exec($ch);
echo $data;
?>
# данные для формирования запроса
$login = 'tratata@tratata.ru';
$pass = 'tratata';
$authurl = 'http://moswar.ru';
$agent = 'Mozilla/5.0 (Windows; U; Windows NT 6.1; ru; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5';
# массив данных для аутентификации
$logindata = array();
$logindata['action'] = 'login';
$logindata['email'] = $login;
$logindata['password'] = $pass;
# подрубаемся
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $authurl);
curl_setopt($ch, CURLOPT_USERAGENT, $agent);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($logindata));
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');
$data = curl_exec($ch);
echo $data;
?>
В файл cookie.txt попадает следующая фигня:
Код:
А вот что ловит файрбаг.
http://habreffect.ru/files/9d0/0ee18d491/image22046891.png
Ну и нихрена не логинится с помощью сURL. Прощу помощи, т.к. запутался в конец уже с этими куками :)
А какие конкретно куки должны устанавливаться? Вас не смущает, кстати, что CURLOPT_COOKIEJAR и CURLOPT_COOKIEFILE ссылаются на один и тот же файл, вы уверены, что это корректно отрабатывает?
Цитата:
CURLOPT_COOKIEFILE The name of the file containing the cookie data. The cookie file can be in Netscape format, or just plain HTTP-style headers dumped into a file.
CURLOPT_COOKIEJAR The name of a file to save all internal cookies to when the handle is closed, e.g. after a call to curl_close.
CURLOPT_COOKIEJAR The name of a file to save all internal cookies to when the handle is closed, e.g. after a call to curl_close.
Меня в описании CURLOPT_COOKIEJAR смущает только слово internal. А что должно -- так там в конце ссылка на картинку, на ней есть ответ сервера с нужной кукой. Да вот только не попадает она в файлик :) Сейчас попробую переименовать один.
UPD. Попробовал. Сохраняется только в файле, указанным в CURLOPT_COOKIEJAR. Второй файлик остается пустым. Не логиниться :)
Покажите исходный cookies.txt, который вы пытаетесь отправлять, посмотрим аккуратно.
Отловил я свой косяк. С куками может все и хорошо. Форма неправильно отправляется. Буду думать.
Попробуйте теста ради переписать ваш код через голые сокеты, без cUrl'а.