LoginIP
@LoginIP
-

Как авторизоваться ВК посредством CURl и PHP?

Добрый день. У Вконтакте сейчас схема авторизации следующая.
1. На странице логина есть два хеша: ip_h и lg_h. Эти хеши подставляются в форму логина.
2. При логине отправляется POST-запрос с этими хешами, логином и паролем на https://login.vk.com/?act=login, который устанавливает куки remixq.
3. Далее нас переадресовывает на vk.com/login.php?act=slogin&to=&s=1&__q_hash=xxx, где вместо xxx подставляется куки remixq.
4. И только после этого Вконтакт устанавливает куки remixsid, по которому уже можно войти в сеть.

Я сначала делаю парсинг хешей со страницы логина:
$url = 'http://vk.com';
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1)");
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
        'accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
        'content-type: application/x-www-form-urlencoded',
        'origin: http://vk.com',
        'referer: http://vk.com/',
));
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);

$content = curl_exec($ch);

preg_match_all("/name=\"ip_h\" value=\"(.*?)\" \\//s", $content, $res[0]);
preg_match_all("/name=\"lg_h\" value=\"(.*?)\" \\//s", $content, $res[1]);


Далее подставляю эти хеши в POST-запрос:

$url = 'http://login.vk.com/?act=login';
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (iPhone; CPU iPhone OS 7_0 like Mac OS X; en-us) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11A465 Safari/9537.53");
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_POST, true);

curl_setopt($ch, CURLOPT_POSTFIELDS, 'act=login&role=al_frame&_origin=http://vk.com&ip_h='.$res[0][1][0].'&ig_h='.$res[1][1][0].'&email=myemail&pass=mypass');

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
    'content-type: application/x-www-form-urlencoded',
    'origin: http://vk.com',
    'referer: http://vk.com/',
));
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);

echo curl_exec($ch);


Но в ответ получаю не установку нужных куки (remixq), а их удаление:

set-cookie:remixmid=DELETED; expires=Thu, 01 Jan 1970 00:00:01GMT;path=/;domain=.vk.com
set-cookie:remixsid=DELETED; expires=Thu, 01 Jan 1970 00:00:01GMT;path=/;domain=.vk.com
set-cookie:remixsid6=DELETED; expires=Thu, 01 Jan 1970 00:00:01GMT;path=/;domain=.vk.com
set-cookie:remixgid=DELETED; expires=Thu, 01 Jan 1970 00:00:01T;path=/;domain=.vk.com


Такой же ответ получается, если отправить неправильные данные. Что я упускаю? У кого-то сейчас получается авторизоваться вконтакте через CURL (не через API)? Раньше эта схема позволяла пройти авторизацию, но щас перестала.
  • Вопрос задан
  • 4043 просмотра
Решения вопроса 1
DevMan
@DevMan
упускаете то, что curl умеет куки:
www.electrictoolbox.com/php-curl-cookies
blog.davenicholas.me.uk/2013/04/session-cookies-an...
google -> php curl cookie
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
catanfa
@catanfa
есть библиотека для PHP для получения авторизационной куки remixsid https://github.com/biganfa/vk-auth
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы