Страницы

Поиск по вопросам

вторник, 4 июня 2019 г.

Авторизация пользователя vk с помощью cURL (PHP)

Добрый день.
Необходимо авторизировать пользователя vk с помощью PHP скрипта и библиотеки cURL. Были рассмотрены следующие решения:
https://forum.antichat.ru/threads/426901/ http://sauron.org.ua/post/938
На основе решений были составлены следующие скрипты.
Получение значений lg_h и ip_h (работает, получает):
$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, true); 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, $ip_h); preg_match_all("/name=\"lg_h\" value=\"(.*?)\" \\//s", $content, $lg_h);
Отправка запроса авторизации вида:
http://login.vk.com/? act=login& role=al_frame& _origin=http://vk.com& ip_h=$ip_h& lg_h=$lg_h& email=& pass=
Сам скрипт:
$url = 'http://login.vk.com/?act=login'; $ch = curl_init($url); curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:42.0) Gecko/20100101 Firefox/42.0"); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); //curl_setopt($ch, CURLOPT_VERBOSE, 1); curl_setopt($ch, CURLOPT_HEADER, true); curl_setopt($ch, CURLOPT_POST, true);
$data = array( 'act' => 'login', 'role' => 'al_frame', '_origin' => 'http://vk.com', 'ip_h' => $ip_h[0][1][0], 'lg_h' => $lg_h[0][1][0], 'email' => '', 'pass' => '' );
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
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); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_COOKIEJAR, '/home//Development/vk/cookie.txt'); curl_setopt($ch, CURLOPT_COOKIEFILE, '/home//Development/vk/cookie.txt');
echo curl_exec($ch);
На выходе получаю следующее содержимое страницы:

В свою очередь куки принимают следующие значения:
Set-Cookie: remixmid=DELETED; expires=Thu, 01 Jan 1970 00:00:01 GMT; path=/; domain=.vk.com Set-Cookie: remixsid=DELETED; expires=Thu, 01 Jan 1970 00:00:01 GMT; path=/; domain=.vk.com Set-Cookie: remixsid6=DELETED; expires=Thu, 01 Jan 1970 00:00:01 GMT; path=/; domain=.vk.com Set-Cookie: remixgid=DELETED; expires=Thu, 01 Jan 1970 00:00:01 GMT; path=/; domain=.vk.com Set-Cookie: remixemail=DELETED; expires=Thu, 01 Jan 1970 00:00:01 GMT; path=/; domain=.vk.com Set-Cookie: remixpass=DELETED; expires=Thu, 01 Jan 1970 00:00:01 GMT; path=/; domain=.vk.com Set-Cookie: remixapi_sid=DELETED; expires=Thu, 01 Jan 1970 00:00:01 GMT; path=/; domain=.vk.com Set-Cookie: remixpermit=DELETED; expires=Thu, 01 Jan 1970 00:00:01 GMT; path=/; domain=.vk.com Set-Cookie: remixsslsid=DELETED; expires=Thu, 01 Jan 1970 00:00:01 GMT; path=/; domain=.vk.com
Смею предположить, что не удается передать значение email, т.к. в коде JS именно на это и ошибка. При ручном составлении URL и перехода по нему — успешное возвращение хэша и содержимое страницы следующее:

Авторизация проходит успешно. После доступен профиль пользователя.


Ответ

Только что написал рабочий код авторизации во ВКонтакте — http://pastebin.com/5YecKuUs
Только учтите, каптча не поддерживается, поэтому сами уже её добавьте.
Тест успешно пройден на моём тестовом аккаунте ;)

Комментариев нет:

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