Добрый день. У Вконтакте сейчас схема авторизации следующая.
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)? Раньше эта схема позволяла пройти авторизацию, но щас перестала.