[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Авторизация с помощью CURL
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12
Winston
Многие начинающие PHP программисты знают о том, что с помощью PHP можно авторизоваться на любом сайте, но многие не знают как это сделать, а есть и такие, что понимают общий принцип авторизации но не знают как на практике это реализовать.
Сегодня я попытаюсь вам на практике показать/объяснить как можно авторизоваться на сайте с помощью PHP.

И так, думаю многие слышали, возможно некоторые и применяли уже такую классную библиотеку PHP как CURL.
Что же нам надо знать для того, чтобы авторизоваться на сайте, самое главное это знать какие данные отправляются на сервер. Посмотрев исходный код страницы можно увидеть форму в которую вводятся данные для отправки на сервер и авторизации, иногда бывает так, что в коде формы авторизации есть много скрытых полей, но они не нужны для авторизации, и собственно их отправлять тоже нет нужды...

У большинства людей может возникнуть естественный вопрос, а как узнать, что отправляется на сервер, а что нет. А в решении этой задачи нам поможет такое отличное дополнение к Firefox как HttpFox. Устанавливаем его себе...

Давайте для начала попробуем авторизоваться на сайте Letitbit.net, т.к. на этом сайте самая простая авторизация :)

Авторизация на Letitbit.net

Заходим на сайт, заполняем поле логин/пароль в всплывающем окошке. Потом запускаем плагин HttpFox нажимаем на зеленый треугольник (старт) потом нажимаем на форме "Авторизоваться". Этот процесс вы можете посмотреть на изображении ниже...
Свернутый текст
user posted image


После того как мы авторизовались смотрим какие данные и куда отправлялись при авторизации. Смотрим изображение.
Свернутый текст
user posted image

И так, мы уже знаем, что данные для авторизации отсылаются в индексный файл (index.php)
Мы можем уже прописать задать некоторые переменные

$url = 'http://letitbit.net'; // URL сайта на котором будем авторизоваться
$urlTo = 'http://letitbit.net/'; // URL на которой будем слать POST данные
$login = 'login_for_authorization';
$pass = 'your_password';


Теперь переключимся на кладку POST Data в плагине HttpFox, там мы видим, в левой колонке имя поля которое отсылается скрипту, а справа значение.
В моем случае передаются 3 параметра act, login и password.
Теперь имея эту информацию мы можем сформировать POST данные для того, чтобы потом отослать через CURL

$post = 'act=login&login=' . $login . '&password=' . $pass;

Эту строку мы и будет отсылать.

Дальше будет самое вкусное, это написание кода :)

Свернутый текст

$url = 'http://letitbit.net'; // URL сайта на котором будем авторизоваться
$urlTo = 'http://letitbit.net/'; // URL на которой будем слать POST данные
$login = 'login_for_authorization'; // Ваш логин
$pass = 'your_password'; // Ваш пароль
$post = 'act=login&login=' . $login . '&password=' . $pass; // POST данные

$ch = curl_init(); // Инициализируем сеанс CURL
curl_setopt($ch, CURLOPT_URL, $url); // Заходим на сайт
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 данные
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // Иногда бывает, что после отправки данных происходит редирект heaer('Location:...').
// Этот параметр говорит о то, чтобы мы следовали за ними, а не оставались на месте после отправки данных


$html = curl_exec($ch); // Записываем пришедшие данные в переменную
curl_close($ch); // Закрываем сеанс работы CURL
echo $html; // И вуаля :) Выводим авторизованную страницу

Вот вам такой самый простой пример авторизации на сайте.

Думаю одного примера авторизации мало, давайте еще один пример...

Авторизация на Mail.ru

Давайте авторизуемся на mail.ru :)
Процесс добывания POST данных такой же как и в предыдущем примере, сначала вбиваем все данные в форму логин/пароль, домен (mail.ru или list.ru и т.д.), запускаем плагин, стартуем его и нажимаем "Войти" на форме
После этого должен появиться весь лог http запросов. С самого начала ищем метод POST, и нажимаем на нем, справа от него есть URL на который нужно отсылать POST у меня это https://auth.mail.ru/cgi-bin/auth
Как видим здесь протокол https, но мы можем отослать и по http протоколу, чтобы делать меньше телодвижений :)

Потом смотрим POST Data нашего сниффера :) и видим, что там передается всего 3 параметра. Login, Domain, Password
И пишем такой вот код авторизации
Свернутый текст

$url = 'http://mail.ru'; // Куда зайти
$urlTo = 'http://auth.mail.ru/cgi-bin/auth'; // Куда данные послать
$login = 'your_login'; // Логин
$pass = 'your_pass'; // Пароль
$domain = 'mail.ru'; // Домен
$post = 'Login=' . $login . '&Domain=' . $domain . '&Password=' . $pass; // POST данные

$ch = curl_init(); // Инициализация сеанса
curl_setopt($ch, CURLOPT_URL, $url); // Заходим на сайт
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // Приказываем вернуть страницу в переменную

$html = curl_exec($ch); // Забираем страницу

curl_setopt($ch, CURLOPT_URL, $urlTo); // Куда шлем POST данные
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt'); // Записываем cookie
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt'); // Читаем cookies
curl_setopt($ch, CURLOPT_POST, true); // Указываем метод отправки
curl_setopt($ch, CURLOPT_POSTFIELDS, $post); // POST данные
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // Говорим скрипту, чтобы он следовал за редиректами которые происходят во время авторизации

$html = curl_exec($ch); // Забираем страницу
curl_close($ch); // Завершаем сеанс
echo $html; // Оказываемся в вашем ящике

Вот так мы и авторизовались на mail.ru. Как вы заметили, что авторизация может происходить и по протоколу https, на mail.ru тоже, но нам повезло в том, что мы отправили данные по протоколу http и это прокатило, что не может не радовать :)
В следующий раз через http может и не получится авторизоваться, потому для того, чтобы авториз. по https нужно будет добавить две опции
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);

первая опция запрещает проверку SSL сертификат, а вторая HOST SSL сертификат.

Надеюсь, что эта небольшая статья доказала вам, что CURL - это сила ! :) Перед которой не устоял даже такой великий и могучий mail.ru :)
Быстрый ответ:

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