Обновленная авторизация Вконтакте (PHP, CURL)

Author Автор: Роман Чернышов    Опубликовано: 13 ноября 2012

Примерно месяц назад социальная сеть Вконтакте немного изменила алгоритм авторизации, в виду чего скрипты использующие автоматическую авторизацию по средствам curl (впрочем это касается вообще любых скриптов и программ), перестали правильно авторизироваться.

В рамкам небольшой заметки привожу фрагмент кода обновленной авторизации на PHP.

<?
$mail = ""; //e-mail или логин от контакта
$pass = ""; //пароль от контакта
 
$otvet=connect("http://login.vk.com/?act=login&email=$mail&pass=$pass");
If(!preg_match("/hash=([a-z0-9]{1,32})/",$otvet,$hash)){
die("Login incorrect");
}
$otvet=connect("http://vk.com/login.php?act=slogin&hash=".$hash[1]);
preg_match("/remixsid=(.*?);/",$otvet,$sid);
$cookie = "remixchk=5; remixsid=$sid[1]";
 
 
function connect($link,$cookie=null,$post=null){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$link);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 0);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0);
if($cookie !== null)
curl_setopt($ch, CURLOPT_COOKIE, $cookie);
if($post !== null)
{
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
}
$otvet = curl_exec($ch);
curl_close($ch);
return $otvet;
}?>

Данный фрагмент кода сильно упрощен, но все же наглядно показывает процесс получения недостающего HASH и последующую его передачу в запрос. Результат на выходе Cookie позволяющие дальше работать с ВК будучи уже авторизированным.

Category PHP     Tags ,

4 комментария to “Обновленная авторизация Вконтакте (PHP, CURL)”

  • Алексей 04.06.2013 в 12:05 пп

    Здравствуйте, Роман. Пытаюсь сделать авторизацию по вашему примеру.
    После получения куков запрашиваю также функцию connect нужной страницы с указанием вторым параметром переменной $cookie. Но страница ответа всё равно содержит текст о том, что нужно авторизоваться.
    Тем более, что смотрю заголовки овтета от Вконтакта, и там кажется remixsid всегда пустой. Как и почти все другие remixs…
    В чём может быть ошибка?

    • Роман Чернышов 04.06.2013 в 12:22 пп

      Доброго времени, ВК может не пускать по причинам
      — Отличия гео-IP, локации вашего хостинга на котором вы запускаете скрипт и вашего IP с которого вы обычно входите в ВК.
      — Проверьте правильно ли скрипт получает параметр $hash

      • Алексей 04.06.2013 в 5:04 пп

        Да, $hash всё верно записывается.

  • Александр 04.01.2014 в 1:36 дп

    Вот спасибо помогло на TCL переписал буду контакт теперь контачить ))

Оставить комментарий

Автор блога
Чернышов Роман
Роман Чернышов
Веб-разработчик, Full Stack
Senior, Architector
PHP, JavaScript, Node.JS, Python, HTML 5, CSS 3, MySQL, Bash, Linux Admin
Заказать работу
предложить оффер

Последние вопросы
Список вопросов
Последние комментарии
Меню

Archive

Мои проекты
Insurance CMS Love Crm CMS Совместные покупки Мой PHP Framework Хостинг для моих клиентов Лицензии на мой софт и поддержка