Advertisement
ru-exec

Новый скрипт авторизации во ВКонтакте PHP CURL

Nov 21st, 2015 (edited)
9,518
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 7.01 KB | None | 0 0
  1. <?php
  2. /*
  3. Новый скрипт авторизации во ВКонтакте на PHP с использованием CURL, Новый скрипт авторизации ВК на PHP с использованием CURL
  4.  
  5. (!) Не предусмотрен ввод каптчи
  6.  
  7. Вы можете оптимизировать скрипт, избавив его от постоянного запроса на авторизацию.
  8. Сам не стал этим заниматься, так как лень ^.^
  9.  
  10. UPD 18.02.2017: Внесены некоторые изменения в скрипт в связи с изменениями ВКонтакте
  11. UPD 31.07.2017: Внесены некоторые изменения в скрипт в связи с изменениями ВКонтакте
  12.  
  13. Author VK: https://vk.com/ruslan.zolotov
  14. */
  15.  
  16. $login = 'login';
  17. $password = 'password';
  18. $security_check_code = '91234567'; // если требуется 8 цифр номера телефона (по крайней мере у меня столько запросило). Например Ваш номер телефона 79123456789, то необходимо в переменную прописать промежуток от 7 до 89, то есть 91234567.
  19.  
  20. $headers = array(
  21.  'accept' => 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
  22.  'content-type' => 'application/x-www-form-urlencoded',
  23.  'user-agent' => 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36'
  24. );
  25.  
  26. // получаем главную страницу
  27. $get_main_page = post('https://vk.com', array(
  28.  'headers' => array(
  29.   'accept: '.$headers['accept'],
  30.   'content-type: '.$headers['content-type'],
  31.   'user-agent: '.$headers['user-agent']
  32.  )
  33. ));
  34.  
  35. // парсим с главной страницы параметры ip_h и lg_h
  36. preg_match('/name=\"ip_h\" value=\"(.*?)\"/s', $get_main_page['content'], $ip_h);
  37. preg_match('/name=\"lg_h\" value=\"(.*?)\"/s', $get_main_page['content'], $lg_h);
  38.  
  39. // посылаем запрос на авторизацию
  40. $post_auth = post('https://login.vk.com/?act=login', array(
  41.  'params' => 'act=login&role=al_frame&_origin='.urlencode('http://vk.com').'&ip_h='.$ip_h[1].'&lg_h='.$lg_h[1].'&email='.urlencode($login).'&pass='.urlencode($password),
  42.  'headers' => array(
  43.   'accept: '.$headers['accept'],
  44.   'content-type: '.$headers['content-type'],
  45.   'user-agent: '.$headers['user-agent']
  46.  ),
  47.  'cookies' => $get_main_page['cookies']
  48. ));
  49.  
  50. // получаем ссылку для редиректа после авторизации
  51. preg_match('/Location\: (.*)/u', $post_auth['headers'], $post_auth_location);
  52.  
  53. if(!preg_match('/\_\_q\_hash=/s', $post_auth_location[1])) {
  54.  echo 'Не удалось авторизоваться <br /> <br />'.$post_auth['headers'];
  55.  
  56.  exit;
  57. }
  58.  
  59. // переходим по полученной для редиректа ссылке
  60. $get_auth_location = post(trim(str_replace('_http', '_https', $post_auth_location[1])), array(
  61.  'headers' => array(
  62.   'accept: '.$headers['accept'],
  63.   'content-type: '.$headers['content-type'],
  64.   'user-agent: '.$headers['user-agent']
  65.  ),
  66.  'cookies' => $post_auth['cookies']
  67. ));
  68.  
  69. // получаем ссылку на свою страницу
  70. preg_match('/"uid"\:"([0-9]+)"/s', $get_auth_location['content'], $my_page_id);
  71.  
  72. $my_page_id = $my_page_id[1];
  73.  
  74. $get_my_page = getUserPage($my_page_id, $get_auth_location['cookies']);
  75.  
  76. // если запрошена проверка безопасности
  77. if(preg_match('/act=security\_check/u', $get_my_page['headers'])) {
  78.  preg_match('/Location\: (.*)/s', $get_my_page['headers'], $security_check_location);
  79.  
  80.  if(isset($security_check_location[1])) {
  81.   $security_check_location = explode("\n", $security_check_location[1]);
  82.  }
  83.  
  84.  // переходим на страницу проверки безопасности
  85.  $get_security_check_page = post('https://vk.com'.trim($security_check_location[0]), array(
  86.   'headers' => array(
  87.    'accept: '.$headers['accept'],
  88.    'content-type: '.$headers['content-type'],
  89.    'user-agent: '.$headers['user-agent']
  90.   ),
  91.   'cookies' => $get_auth_location['cookies']
  92.  ));
  93.  
  94.  // получаем hash для запроса на проверку мобильного телефона
  95.  preg_match('/hash: \'(.*?)\'/s', $get_security_check_page['content'], $get_security_check_page_hash);
  96.  
  97.  // вводим запрошенные цифры мобильного телефона
  98.  $post_security_check_code = post('https://vk.com/login.php', array(
  99.   'params' => 'act=security_check&code='.$security_check_code.'&al_page=2&hash='.$get_security_check_page_hash[1],
  100.   'headers' => array(
  101.    'accept: '.$headers['accept'],
  102.    'content-type: '.$headers['content-type'],
  103.    'user-agent: '.$headers['user-agent']
  104.   ),
  105.   'cookies' => $get_auth_location['cookies']
  106.  ));
  107.  
  108.  echo 'Запрошена проверка безопасности';
  109.  
  110.  // отображаем свою страницу после проверки безопасности
  111.  $get_my_page = getUserPage($my_page_id, $get_auth_location['cookies']);
  112.  
  113.  echo iconv('windows-1251', 'utf-8', $get_my_page['content']);
  114. } else {
  115.  // также отображаем свою страницу, если нет проверки безопасности
  116.  echo iconv('windows-1251', 'utf-8', $get_my_page['content']);
  117. }
  118.  
  119. function getUserPage($id = null, $cookies = null) {
  120.  global $headers;
  121.  
  122.  $get = post('https://vk.com/id'.$id, array(
  123.   'headers' => array(
  124.    'accept: '.$headers['accept'],
  125.    'content-type: '.$headers['content-type'],
  126.    'user-agent: '.$headers['user-agent']
  127.   ),
  128.   'cookies' => $cookies
  129.  ));
  130.  
  131.  return $get;
  132. }
  133.  
  134. function post($url = null, $params = null, $proxy = null, $proxy_userpwd = null) {
  135.  $ch = curl_init();
  136.  
  137.  curl_setopt($ch, CURLOPT_URL, $url);
  138.  curl_setopt($ch, CURLOPT_HEADER, 1);
  139.  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  140.  curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
  141.  
  142.  if(isset($params['params'])) {
  143.   curl_setopt($ch, CURLOPT_POST, 1);
  144.   curl_setopt($ch, CURLOPT_POSTFIELDS, $params['params']);
  145.  }
  146.  
  147.  if(isset($params['headers'])) {
  148.   curl_setopt($ch, CURLOPT_HTTPHEADER, $params['headers']);
  149.  }
  150.  
  151.  if(isset($params['cookies'])) {
  152.   curl_setopt($ch, CURLOPT_COOKIE, $params['cookies']);
  153.  }
  154.  
  155.  if($proxy) {
  156.   curl_setopt($ch, CURLOPT_PROXY, $proxy);
  157.  
  158.   if($proxy_userpwd) {
  159.    curl_setopt($ch, CURLOPT_PROXYUSERPWD, $proxy_userpwd);
  160.   }
  161.  }
  162.  
  163.  $result = curl_exec($ch);
  164.  $result_explode = explode("\r\n\r\n", $result);
  165.  
  166.  $headers = ((isset($result_explode[0])) ? $result_explode[0]."\r\n" : '').''.((isset($result_explode[1])) ? $result_explode[1] : '');
  167.  $content = $result_explode[count($result_explode) - 1];
  168.  
  169.  preg_match_all('|Set-Cookie: (.*);|U', $headers, $parse_cookies);
  170.  
  171.  $cookies = implode(';', $parse_cookies[1]);
  172.  
  173.  curl_close($ch);
  174.  
  175.  return array('headers' => $headers, 'cookies' => $cookies, 'content' => $content);
  176. }
  177. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement