Авторизация на pdj через curl, с отправкой POST
1.
Михаил (10.03.2012 / 15:30)
Имеется грабер pdj.ru, до недавнего времени он как и все обычные грабы тупо через file_get_contents открывал страницу и дальше работал с ним. Но теперь на pdj.ru ввели обязательную авторизацию, для просмотра сайта с 10 страницы и далее. Т.е сграбить по старому теперь можно только до 10 страницы включительно. Нужно авторизоваться через curl и продолжить работу в прежнем режиме. Я погуглил, узнал какие данные нужно отправить в формы, чтобы авторизоваться, но pdj.ru выдает следующее: 301 Moved Permanently. Так же на просторах интернета узнал, что на pdj стоит проверка на headers'ы. Тут и столкнулся с проблемой, вроде отправляю все headers'ы, а ошибка остается.
Вопрос: что не правильно делаю? =)
2.
Михаил (10.03.2012 / 15:30)
Вот headers'ы, которые удалось выудить с помошью HttpFox:
(Request-Line) POST /stat.php HTTP/1.1
Host stat.livetool.ru
User-Agent Mozilla/5.0 (Windows NT 6.1; WOW64; rv:10.0.2) Gecko/20100101 Firefox/10.0.2
Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding gzip, deflate
Connection keep-alive
Cache-Control no-cache, no-cache
Content-Type application/x-www-form-urlencoded; charset=UTF-8
Content-Length 157
X-Livetool Yes
Pragma no-cache
Вот код, с помошью которого пытаюсь авторизоваться:
$url = 'http://www.promodj.com'; // URL сайта на котором будем авторизоваться
$urlTo = 'http://www.promodj.com/login'; // URL на которой будем слать POST данные
$login = 'login'; // Ваш логин
$pass = 'pass'; // Ваш пароль
$post = 'backto=promodj.com&unsafeip=1&remember=1&login='.$login.'&password='.$pass; // POST данные
$ch = curl_init(); // Инициализируем сеанс CURL
curl_setopt($ch, CURLOPT_URL, $url); // Заходим на сайт
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // Делаем так, чтобы страница не выдавалась сразу в поток, а можно было ее записать в переменную
$html = curl_exec($ch); // Имитируем заход на сайт
curl_setopt($ch, CURLOPT_URL, $urlTo); // Устанавливаем адрес куда будем слать POST данные
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt'); // Записываем cookies в файл, чтобы потом можно было их считать
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt'); // Теперь читаем cookies с файла
curl_setopt($ch, CURLOPT_POST, true); // Говорим, что информация будет отправляться методом POST
curl_setopt($ch, CURLOPT_POSTFIELDS, $post); // Передаем POST данные
// Иногда бывает, что после отправки данных происходит редирект heaer('Location:...').
// Этот параметр говорит о то, чтобы мы следовали за ними, а не оставались на месте после отправки данных
$html = curl_exec($ch); // Записываем пришедшие данные в переменную
curl_close($ch); // Закрываем сеанс работы CURL
echo $html; // И вуаля :) Выводим авторизованную страницу
3.
Михаил (10.03.2012 / 15:35)
В скрипт не вставил строку отправки hedaers'ов, так как делал это через "curl_setopt($curl, CURLOPT_HEADER, $headers);". Сказали что не правильно.....как же мне быть?
URL:
https://visavi.net/topics/30360