Обновленная авторизация Вконтакте (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, Architect
PHP, JavaScript, Node.JS, Python, HTML 5, CSS 3, MySQL, Bash, Linux Admin
Заказать работу
предложить оффер

Моя книга
Книга. Веб-разработчик. Легкий вход в профессию
Печатная книга
Веб-разработчик.
Легкий вход в профессию
Купить за 359₽
Популярные записи
Последние вопросы
Список вопросов
Последние комментарии
Меню

Archive

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