Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
Страницы: (13) [1] 2 3 ... Последняя » ( Перейти к первому непрочитанному сообщению )  
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Авторизация с помощью CURL, На примерах
Winston  
 ۩  [x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме




******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 9509
Пользователь №: 18161
На форуме: 8 лет, 2 дня
Карма: 552




Многие начинающие 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 :)
PMСайт пользователя
    2   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Winston  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме




******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 9509
Пользователь №: 18161
На форуме: 8 лет, 2 дня
Карма: 552




Тему закрепил, надеюсь кому-то будет полезна smile.gif
PMСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Игорь_Vasinsky  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



c начала 2017 года в Новосибирске.
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 26422
Пользователь №: 21350
На форуме: 7 лет, 3 месяца, 11 дней
Карма: 739




Добавил закладки. wink.gif


--------------------
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql (TSql, BI OLAP, MDX), Git, SVN, CodeIgnater, Yii 2, JiRA, Redmine, Bitbucket, Composer
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
RCuPeR  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



LadaFWD club
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 1448
Пользователь №: 24637
На форуме: 6 лет, 7 месяцев, 25 дней
Карма: 22




Мужики, подскажите, как мне получить заголовки от тоже mail.ru при авторизации ?


--------------------
Гнусный социопат с комплексом Бога.
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Winston  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме




******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 9509
Пользователь №: 18161
На форуме: 8 лет, 2 дня
Карма: 552




CURLOPT_HEADER true
PMСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
RCuPeR  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



LadaFWD club
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 1448
Пользователь №: 24637
На форуме: 6 лет, 7 месяцев, 25 дней
Карма: 22




$headers = curl_setopt($ch, CURLOPT_HEADER, true); 
print_r($headers);


Будет работать ?


--------------------
Гнусный социопат с комплексом Бога.
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Winston  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме




******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 9509
Пользователь №: 18161
На форуме: 8 лет, 2 дня
Карма: 552




Нужно добавлять в набор
curl_setopt($ch, CURLOPT_URL, $urlTo);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_exec($ch);
curl_close($ch);

И выведутся тебе заголовки.
PMСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Игорь_Vasinsky  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



c начала 2017 года в Новосибирске.
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 26422
Пользователь №: 21350
На форуме: 7 лет, 3 месяца, 11 дней
Карма: 739




biggrin.gif а чё не проверишь то?


--------------------
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql (TSql, BI OLAP, MDX), Git, SVN, CodeIgnater, Yii 2, JiRA, Redmine, Bitbucket, Composer
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Winston  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме




******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 9509
Пользователь №: 18161
На форуме: 8 лет, 2 дня
Карма: 552




Также можешь еще написать
echo '<pre>'.print_r(curl_getinfo($ch),1).'</pre>';
PMСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
RCuPeR  
[x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



LadaFWD club
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 1448
Пользователь №: 24637
На форуме: 6 лет, 7 месяцев, 25 дней
Карма: 22




Ну вот смотрите, следую примеру выше:

Свернутый текст
function twitter_reg($name, $email, $password)
{
$url = 'http://twitter.com/'; // Куда зайти
$urlTo = 'https://twitter.com/signup'; // Куда данные послать
$_SESSION['username'] = $name; // Пароль
$_SESSION['email'] = $email; // Домен
$_SESSION['password'] = $password;
$context = 'front';

$data = 'user[name]=' . $_SESSION['username'] . '&user[email]=' . $_SESSION['email'] . '&user[user_password]=' . $_SESSION['password'] . '&context =' . $context; // 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_HEADER, true);
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);


}


Дальше мне нужно выполнить действия согласно полученному заголовку о статусе. Т.е, если HTTP request status: 200 - делай дальше, если HTTP request status: 404 - выведи ошибку. Как именно я могу получить заголовки статуса запроса.

Протестить, к сожалению не могу. Долго объяснять, поверь на слово.

Это сообщение отредактировал Winston - 31.10.2011 - 01:02


--------------------
Гнусный социопат с комплексом Бога.
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Winston  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме




******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 9509
Пользователь №: 18161
На форуме: 8 лет, 2 дня
Карма: 552




Можешь добавить еще вот такую строку в последний набор
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

Потом ты с помощью preg_match можешь распарсить страницу, которая будет находится в $html
PMСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
RCuPeR  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



LadaFWD club
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 1448
Пользователь №: 24637
На форуме: 6 лет, 7 месяцев, 25 дней
Карма: 22




Эм, так я же и так вот тут: $html = curl_exec($ch); получаю станицу ?!

Но давай ближе к делу, как выбрать эти headers unsure.gif


--------------------
Гнусный социопат с комплексом Бога.
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Winston  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме




******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 9509
Пользователь №: 18161
На форуме: 8 лет, 2 дня
Карма: 552




Добавляешь вот такую строку
Цитата (Winston @ 30.10.2011 - 23:05)
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

После строчки с CURLOPT_FOLLOWLOCATION
Потом пишешь
preg_match("...", $html, $match); // Пишем шаблон для парсинга заголовков
print_r($match); // Печатаем, то, что нашли
echo $html; // Выводим страницу
PMСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
RCuPeR  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



LadaFWD club
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 1448
Пользователь №: 24637
На форуме: 6 лет, 7 месяцев, 25 дней
Карма: 22




Лан, пробуем. С Богом !


--------------------
Гнусный социопат с комплексом Бога.
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Winston  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме




******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 9509
Пользователь №: 18161
На форуме: 8 лет, 2 дня
Карма: 552




Или, даже лучше будет, написать строчку
$info = curl_getinfo($ch);
Перед закрытием сеанса curl, и потом можно достать статус, вот так
echo $info['http_code'];
PMСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темыСтраницы: (13) [1] 2 3 ... Последняя » Ответ в темуСоздание новой темыСоздание опроса