#php #вконтакте #curl #авторизация
Добрый день. Необходимо авторизировать пользователя 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 и перехода по нему — успешное возвращение хэша и содержимое страницы следующее: Авторизация проходит успешно. После доступен профиль пользователя.
Ответы
Ответ 1
Только что написал рабочий код авторизации во ВКонтакте — http://pastebin.com/5YecKuUs Только учтите, каптча не поддерживается, поэтому сами уже её добавьте. Тест успешно пройден на моём тестовом аккаунте ;)Ответ 2
Есть рабочая библиотека для PHP, которая получает куку remixsid.Ответ 3
По состоянию на июль 2018 это рабочий код. Авторизация через мобильную страницу т.к. проще. $email = "{ТЕЛЕФОН}"; $pass = "{ПАРОЛЬ}"; $auth_url = "https://m.vk.com"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $auth_url); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); //файл для сохранения кукис - cookie.txt curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //получаем содержимое формы авторизации (URL атрибута action) $login_page = curl_exec($ch); curl_close($ch); //парсим страницу... $html = str_get_html($login_page); //..и узнаем урл авторизации (использовал библиотеку Simple PHP DOM Parser) $login_url = $html->find("form",0)->action; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $login_url); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); //отправляем ПОСТ запрос curl_setopt($ch, CURLOPT_POST, 1); //следуем за редиректом curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); //данные запроса curl_setopt($ch, CURLOPT_POSTFIELDS, ["email"=>$email, "pass"=>$pass]); //СНАЧАЛА ЧИТАЕМ КУКИ полученные в первом запросе curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt'); //потом ДОБАВЛЯЕМ НОВЫЕ curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_exec($ch); curl_close($ch); //пользователь авторизован //далее тестируем $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "https://vk.com/groups?act=catalog"); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); //только читаем куки curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $page = curl_exec($ch); curl_close($ch); //если ваш сервер работает на UTF-8, в отличие от VK (windows-1251) echo iconv('windows-1251','utf-8',$page);Ответ 4
Попробуйте закодироватьфункцией urlencode
Комментариев нет:
Отправить комментарий