В прошлом посте мы делали POST запросы, а сегодня мы будем авторизироваться в Яндексе. Помимо отправки POST формы с логином и паролем, нам необходимо будет также авторизироваться, тоесть сохранить нужные куки и отдавать их в последующих запросах.
Поставим себе следующую задачу — получать содержимое панели вебмастера с помощью PHP.
Все знают, как при помощи PHP получить содержание той или иной страницы. Но в нашей задаче есть одна загвоздка — чтобы получить страницу с сайтами определенного аккаунта, нам нужно войти под этим аккаунтом. Для этого необходимо отправить POST форму отсюда. Внимательно изучаем все поля этой формы, нам необходимо отправить Яндексу все эти поля. В ответ Яндекс даст нам куку, которую мы должны сохранить и отдавать обратно Яндексу при каждом следующем посещении страницы с инфой, доступной только авторизированным пользователям.
Вот, собственно, функция авторизации:
<?php
$url = "http://passport.yandex.ru/passport?mode=auth"; //УРЛ, куда отправлять данные
/*
Переменные, которые мы будет отправлять Яндексу в виде POST запроса:
*/
$login = 'test'; //Логин
$passwd = 'test'; //Пароль
$user_cookie_file = $_SERVER['DOCUMENT_ROOT'].'/cookies.txt'; //Полный путь до файла, где будем хранить куки
$idkey = '3121235564020nVDfxvth2'; //Хрен знает что
$retpath = 'http://webmaster.yandex.ru/'; //Откуда мы пришли на страницу авторизации
$timestamp = ''; //Хрен знает что
$twoweeks = 'yes'; //Две недели какие-то
$In = 'Войти'; //Кнопка входа
/*
Функция:
*/
function auth($url) {
global $user_cookie_file, $idkey, $retpath, $timestamp, $login, $passwd, $twoweeks, $In; // Получаем все POST данные
/*
Небольшая прелюдия с инифиализацией cURL и прочей шулухой
*/
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)");
curl_setopt($ch, CURLOPT_COOKIEFILE, $user_cookie_file); //Куки раз
curl_setopt($ch, CURLOPT_COOKIEJAR, $user_cookie_file); //Куки два
curl_setopt($ch, CURLOPT_POST,1); //Будем отправлять POST запрос
/*
Формируем и отправляем тот самый POST запрос.
Как видите, это простая строка, мало чем отличающаяся от GET.
*/
curl_setopt($ch, CURLOPT_POSTFIELDS,"idkey=$idkey&retpath=$retpath×tamp=$timestamp&login=$login&passwd=$passwd&twoweeks=$twoweeks&In=$In");
$html = curl_exec($ch);
curl_close($ch);
return $html; //Возвращаем ответ Яндекса
}
auth($url); // Авторизируемся.
?>
С авторизацией все понятно — отправили логин, пароль и прочую информацию, сохранили отданные Яндексом куки. Теперь нам необходима функция, которая будет отдавать сохраненные куки Яндексу и получать ответ, тоесть ходить по защищенным страницам как добропорядочный живой юзер с настоящего добропорядочного браузера.
Вот эта функция:
<?php
function browser($url) {
$user_cookie_file = $_SERVER['DOCUMENT_ROOT'].'/cookies.txt'; //Получаем сохраненный после авторизации файл с куками.
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)");
curl_setopt($ch, CURLOPT_COOKIEFILE, $user_cookie_file); //Подставляем куки раз
curl_setopt($ch, CURLOPT_COOKIEJAR, $user_cookie_file); //Подставляем куки два
$html = curl_exec($ch);
curl_close($ch);
return $html; //Возвращаем ответ
}
echo browser('http://webmaster.yandex.ru/'); //Безпрепятственно выводим заветную инфу
?>
Надо также сказать, что авторизироваться достаточно один раз, а потом в течение 2х недель просто юзать функцию browser();
Думаю, вы понимаете, что описанным способом можно авторизироваться не только на Яндексе, а вообще где угодно.
Удачи.
h++p://php.name/php/avtorizaciya-v-yandekse-php-i-cookies/
Интересная информация, только вот все-равно не могу уловить как?
Пытаюсь организовать вход на своем сайте и чтобы логинилось и в яндексе, но ничего не выходит…
Может сможете объяснить популярнее как это можно организовать?
Огромное спасибо за изумительную поучительную статью. Это — квинтессенция того, что я искал очень долго и наконец нашел. Удачи вам.
К сожалению алгоритм авторизации сейчас изменился, и я что то ни как не могу с ним справится не пускает и все видимо из за idkey который не понять как генерируется, так же timestamp который состоит из натурального timestamp и какой то соли…