[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Зайдем cUrl(ом) на Depositfiles.com? Авторизация.
ZHN
Уважаемые php кодеры, позвольте задать такой интересный вопрос.

Подскажите как авторизоваться на http://depositfiles.com со своими логином паролем.

Делаю так:
PHP
//здесь авторизируемся на сайте   
$url="http://depositfiles.com/ru/";   
$ch curl_init();    
// url страницы для авторизации   
curl_setopt($chCURLOPT_URL$url);   
//вернуть результат запроса в переменную, а не на экран   
curl_setopt($chCURLOPT_RETURNTRANSFER,1);   
// используем метод POST    
curl_setopt($chCURLOPT_POST1);   
// данные передаваемые POST запросом   
curl_setopt($chCURLOPT_POSTFIELDS"login=***&password=***");   
//сохранять полученные COOKIE в файл   
curl_setopt($chCURLOPT_COOKIEJAR$_SERVER['DOCUMENT_ROOT'].'/cookie.txt');   
//запускаем   
$result curl_exec($ch);


//здесь скачиваем как авторизированные пользователь страницу   
$url="http://depositfiles.com/ru/";   
//url страницы или файла для скачивания   
curl_setopt($chCURLOPT_URL$url);   
//запрещаем делать запрос с помощью POST и соответственно разрешаем с помощью GET    
curl_setopt($chCURLOPT_POST0);    
//отсылаем серверу COOKIE полученные от него при авторизации   
curl_setopt($chCURLOPT_COOKIEFILE$_SERVER['DOCUMENT_ROOT'].'/cookie.txt'); //get cookie from file   
//запускаем   
$result curl_exec($ch);   
       
curl_close($ch);     
       
echo 
$result;



Этот код не работает. Есть такая загвоздочка, (собственно по этой причине код и неработает наверное) при физическом вводе логина и пароля происходит редирект...

Урл дан, код дан - вроде все правильно...
Помогите пожалуйста!!!



Спустя 42 минуты, 9 секунд (23.01.2009 - 21:24) kirik написал(а):
ZHN, установи параметр curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);, тогда тоже будет редиректить.
А почему бы не авторизовываться напрямую через куки?

Спустя 1 минута, 23 секунды (23.01.2009 - 21:25) Adamant написал(а):
PHP
curl_setopt($chCURLOPT_POSTFIELDS"login=***&password=***");

Пост данные нужно урленкодировать.

PHP
// cURL будет выводить подробные сообщения о всех производимых действиях
    
curl_setopt($chCURLOPT_VERBOSE1);
    
curl_setopt($chCURLOPT_HEADER1);

И забыли
PHP
curl_setopt($chCURLOPT_COOKIEFILE$_SERVER['DOCUMENT_ROOT'].'/cookie.txt');
// при получении HTTP заголовка "Location: " будет происходить перенаправление
// на указанный этим заголовком URL
curl_setopt($chCURLOPT_FOLLOWLOCATION1);
curl_setopt($chCURLOPT_USERAGENT'Mozilla/4.0.' .
                    
'(compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322)');
curl_setopt($chCURLOPT_REFERER$referer);

И посмотрите что вам возвращает сервер:
Цитата (ZHN @ 24.01.2009 - 00:42)
//запускаем
$result = curl_exec($ch);


И посмотрите какие заголовки уходят-приходят при нормальной авторизации через браузер каким нибудь хорошим снифером (например Wireshark или CommView) и потом эмулируйте это curl-ом.

Я тоже одно время на этом много раньше время тратил. Потом написал себе класс (чтобы каждый раз не писать все заново) и сейчас в подобных случаях уже использую готовую и проверенную на большом количестве тестов.

Спустя 23 минуты, 7 секунд (23.01.2009 - 21:48) ZHN написал(а):
Сделал так:

PHP
//здесь авторизируемся на сайте   
$url="http://depositfiles.com/ru/";   
$ch 
= curl_init(); 
// cURL будет выводить подробные сообщения о всех производимых действиях
    curl_setopt($ch, CURLOPT_VERBOSE, 1);
    curl_setopt($ch, CURLOPT_HEADER, 1);   
// url страницы для авторизации   
curl_setopt($ch, CURLOPT_URL, $url);   
//вернуть результат запроса в переменную, а не на экран   
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);   
// используем метод POST    
curl_setopt($ch, CURLOPT_POST, 1);   
// данные передаваемые POST запросом   
curl_setopt($ch, CURLOPT_POSTFIELDS, "login=***&password=***");   
//сохранять полученные COOKIE в файл   
curl_setopt($ch, CURLOPT_COOKIEJAR, $_SERVER['DOCUMENT_ROOT'].'/cookie.txt');
// при получении HTTP заголовка "Location: " будет происходить перенаправление
// на указанный этим заголовком URL
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0.' .'(compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322)');
curl_setopt($ch, CURLOPT_REFERER, $referer);   
//запускаем   
$result = curl_exec($ch);


//здесь скачиваем как авторизированные пользователь страницу   
$url="http://depositfiles.com/ru/";   
//url страницы или файла для скачивания   
curl_setopt($ch, CURLOPT_URL, $url);   
//запрещаем делать запрос с помощью POST и соответственно разрешаем с помощью GET    
curl_setopt($ch, CURLOPT_POST, 0);    
//отсылаем серверу COOKIE полученные от него при авторизации   
curl_setopt($ch, CURLOPT_COOKIEFILE, $_SERVER['DOCUMENT_ROOT'].'/cookie.txt');//get cookie from file  
// при получении HTTP заголовка "Location: " будет происходить перенаправление
// на указанный этим заголовком URL
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0.' .'(compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322)');
curl_setopt($ch, CURLOPT_REFERER, $referer);  
//запускаем   
$result = curl_exec($ch);   
       
curl_close
($ch);     
       
echo $result
;


не работает. mad.gif

Строки:

PHP
curl_setopt($ch, CURLOPT_VERBOSE, 1);
    curl_setopt($ch, CURLOPT_HEADER, 1);

Не отображают ничего...

Используя код приведенный выше отображается:
PHP
HTTP/1.1 200 OK Server: nginx/0.5.34 Date: Fri, 23 Jan 2009 18:42:34 GMT Content-Type: text/html Transfer-Encoding: chunked Connection: keep-alive Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma: no-cache Vary: Accept-Encoding,User-

ну и страничка на которую лезу...

проверьте кто нибудь пожалуйста, почему не работает?

Adamant не хотите ли поделиться классом? rolleyes.gif

Спустя 2 часа, 45 минут, 31 секунда (24.01.2009 - 00:34) Adamant написал(а):
Уважаемый ZHN, вы все же не стали следовать моему совету смотреть снифером чего мы делаем из браузера. Вы бы тогда заметили :
    1. данные уходят постом не на http://depositfiles.com/ru/, а на 'http://depositfiles.com/ru/login.php?return=%2Fru%2F'

    2. И пост данные выглядят по другому go=1&login=user&password=123456789

У меня все прекрасно работает. Так что и вы сможете.

ЗЫ. Советую потратить свое время и сначала поработать с сокетами (fsockopen) чтобы иметь более полное представление о работе с http - протоколом.




Спустя 12 часов, 13 минут, 35 секунд (24.01.2009 - 12:47) ZHN написал(а):
Да, действительно, работает...
Спасибо всем.


_____________
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.