Добрый день. У Вконтакте сейчас схема авторизации следующая. 1. На странице логина есть два хеша: ip_h и lg_h. Эти хеши подставляются в форму логина. 2. При логине отправляется POST-запрос с этими хешами, логином и паролем на https://login.vk.com/?act=login, который устанавливает куки remixq. 3. Далее нас переадресовывает на http://vk.com/login.php?act=slogin&to=&s=1&__q_hash=xxx, где вместо xxx подставляется куки remixq. 4. И только после этого Вконтакт устанавливает куки remixsid, по которому уже можно войти в сеть. Я сначала делаю парсинг хешей со страницы логина: PHP: $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-запрос: PHP: $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), а их удаление: Такой же ответ получается, если отправить неправильные данные. Что я упускаю? У кого-то сейчас получается авторизоваться вконтакте через CURL (не через API)? Раньше эта схема позволяла пройти авторизацию, но недели две назад перестала.
Добавить еще сохранение кук: PHP: curl_setopt($ch, CURLOPT_COOKIEJAR, '666.txt'); curl_setopt($ch, CURLOPT_COOKIEFILE, '666.txt');
Нечего сохранять, т.к. куки не назначаются. Я бы их из заголовков достал, но сервер ведёт себя по разному, на одинаковые по-сути запросы (один нативный, один через CURL). И я не могу найти, в чём для него разница.
Вы были правы, таки куки не сохранялись. Вот это при правильном использовании помогло. curl_setopt($ch, CURLOPT_COOKIEJAR, '666.txt'); curl_setopt($ch, CURLOPT_COOKIEFILE, '666.txt');
Авторизоваться можно только "вручную" вводя логин и пароль через llogin.vk.com, просто куки из браузера подставить не получится , так? Странно что если соц сеть использует такой метод для предотвращения воровства куки, что банки не использут такой метод.