@popov654
Специалист в области веб-технологий

Авторизация в ВК через cURL в обход API?

Здравствуйте!

Есть задача - написать скрипт, позволяющий залогиниться в вк по логину и паролю, имитируя браузер.
Есть код, который должен работать, но почему-то авторизации не происходит. Я так понимаю, у вк есть какая-то защита (про проверку IP в курсе, дело не в этом, т.к. хостинг, с которого пытался всё это делать - российский). Но я не понимаю, какая именно. Вроде всё точно воспроизвёл. Неужели какие-то хитрые тайминги (настоящий браузер работает медленнее)?

Вот мой текущий код (писался год назад, мог несколько устареть).

<?php

$str = file_get_contents("https://vk.com/login");
$doc = new DOMDocument();
$doc->loadHTML($str);
//print_r($doc->getElementById("login_form")->childNodes);

echo "<pre>\r\n";
foreach($doc->getElementById("login_form")->childNodes as $node) {
   if ($node->nodeType == 1 && $node->tagName == "input") {
      if ($node->getAttribute("name") == "ip_h") $ip_h = $node->getAttribute("value");
      if ($node->getAttribute("name") == "lg_h") $lg_h = $node->getAttribute("value");
      //echo $node->getAttribute("name").": ".$node->getAttribute("value")."<br />\r\n";
   }
}

$url = "https://vk.com/login?act=login";

$post_data = array (
    "act" => "login",
    "role" => "al_frame",
    "expire" => "",
    "captcha_sid" => "",
    "captcha_key" => "",
    "_origin" => "https://vk.com",
    "ip_h" => $ip_h,
    "lg_h" => $lg_h,
    "email": "sample_user@gmail.com",
    "pass" => "PASSWORD"
);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_COOKIEJAR, "vg75hjg96.txt");
curl_setopt($ch, CURLOPT_COOKIEFILE, "vg75hjg96.txt");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
$output = curl_exec($ch);
curl_close($ch);

echo $output;

echo "</pre>\r\n";

?>


В результате никакой авторизации не происходит.

Кстати, замечал странный баг: в браузере с верным паролем авторизация тоже иногда происходит не с первого раза. При этом выглядит всё не совсем так, как при вводе неверного пароля с точки зрения UI, сообщение об ошибке чуть иное.

Есть какие-то идеи, что делать?
  • Вопрос задан
  • 1261 просмотр
Пригласить эксперта
Ответы на вопрос 1
ilyachase
@ilyachase
web-developer
В свое время тоже на это наткнулся.
Использовал мобильную версию сайта для авторизации - там всё ОК было.
m.vk.com
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы