Авторизация ВКонтакте‎ на PHP

Этапы авторизации на сайте vkontakte.ru

Вход

Вход

  1. Загружаем страницу входа ВКонтакте‎
    GET http://vkontakte.ru/login.php
    Сразу же для сайта *.vkontakte.ru ставится кука remixchk
    Set-Cookie remixchk=5

    В загруженной странице, мы видим форму login и функции try_to_login() и quick_login()

    function try_to_login(obj, text) {
    //нам важно только это
    if (text.substr(0, 7) == 'vklogin') {
    vklogin = true;
    ge('login').submit(); //ge это getElementById()
    }
    }
    function quick_login() {
    var options = {onSuccess: try_to_login};
    hide('message_text');
    Ajax.postWithCaptcha('http://vkontakte.ru/login.php', {'op': 'a_login_attempt'}, options);
    }
    <form method="post" name="login" id="login" action="http://login.vk.com/" onsubmit="quick_login();">
    <input type="hidden" name="act" id="act" value="login">
    <input type="hidden" name="success_url" id="success_url" value="">
    <input type="hidden" name="fail_url" id="fail_url" value="">
    <input type="hidden" name="try_to_login" id="try_to_login" value="1">
    <input type="hidden" name="to" id="to" value=""/>
    <input type="hidden" name="vk" id="vk" value="">
    <span>E-mail или Логин:</span>
    <input type="text" name="email" value="" id="email"/>
    <span>Пароль:</span>
    <input type="password" name="pass" value="" id="pass"/>
    <input type="hidden" name="expire" id="expire" />
    <span><a href="javascript: quick_login()">Вход</a></span>
    <input type="submit" value='.'/>
    </form>
  2. После нажатия кнопки «Вход», выполняется функция quick_login(), которая пытается авторизоваться по кукам и делает POST запрос vkontakte.ru/login.php
    POST http://vkontakte.ru/login.php
    Cookie: remixchk=5
    op=a_login_attempt

    Получаем:
    HTTP/1.1 200 OK
    vklogin
  3. Функция try_to_login() анализирует результат и делает POST запрос формой login:
    POST http://login.vk.com/

    Parameter Name Value
    act login
    success_url
    fail_url
    try_to_login 1
    to
    vk
    email no@rus.chars
    pass no*rus*chars
    expire

    Получаем:

    HTTP/1.1 200 OK
    <body onload="document.getElementById('l').submit();">
    <form id="l" action="http://vkontakte.ru/login.php" method="post"> <input id="op" name="op" type="hidden" value="slogin" />
    <input id="redirect" name="redirect" type="hidden" value="1" />
    <input id="expire" name="expire" type="hidden" value="0" />
    <input id="to" name="to" type="hidden" />
    <input id="s" name="s" type="hidden" value="a8gf99fcf9d22f1eb5a92201d1ec66abbe14752b5c6c2acbd42813ea" />
    </form>
    </body>

  4. В событии onload, т.е сразу после загрузки страницы делается POST формы «l»
    POST http://vkontakte.ru/login.php

    Parameter Name Value
    op slogin
    redirect 1
    expire 0
    to
    s a8gf99fcf9d22f1eb5a92201d1ec66abbe14752b5c6c2acbd42813ea

    В ответе получаем:

    HTTP/1.1 302 Found
    Set-Cookie: remixsid=a8gf99fcf9d22f1eb5a92201d1ec66abbe14752b5c6c2acbd42813ea; expires=Fri, 14-Jan-2011 08:39:43 GMT; path=/; domain=.vkontakte.ru
    Location: profile.php

    Из переменной s нам повесили куку remixsid.
    Итак, мы получили 302 redirect на profile.php, а значит, авторизовались.

  5. Загружаем страницу profile.php
    GET http://vkontakte.ru/profile.php
    Cookie: remixsid=a8gf99fcf9d22f1eb5a92201d1ec66abbe14752b5c6c2acbd42813ea; remixchk=5

    В ответе получаем
    HTTP/1.1 200 OK

PHP-скрипт авторизации vkontakte.ru

Данный скрипт авторизуется на сайте vkontakte.ru, используя те же этапы, что и в теории с помощью библиотеки cURL.
sleep(2) – задержка на 2 секунды
$Email – логин
$Password – пароль
<?php
$Email = urlencode('no@rus.chars');
$Password = urlencode('no*rus*chars');
$ch = curl_init();
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0");
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookies.txt');
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookies.txt');
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
//GET vkontakte.ru/login.php
curl_setopt ($ch, CURLOPT_URL, 'http://vkontakte.ru/login.php');
$body = curl_exec($ch);
sleep(2);
//POST vkontakte.ru/login.php
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "op=a_login_attempt");
curl_setopt ($ch, CURLOPT_URL, 'http://vkontakte.ru/login.php');
$body = curl_exec($ch);
//POST login.vk.com/
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "act=login&success_url=&fail_url=&try_to_login=1&to=&vk=&email=".$Email."&pass=".$Password."&expire=");
curl_setopt ($ch, CURLOPT_URL, 'http://login.vk.com/');
$body = curl_exec($ch);
sleep(2);
//парсим remixsid
$arr = array();
preg_match_all("|<input\stype=\'hidden\'\sname=\'s\'\sid=\'s\'\svalue=\'(.+)\'\s/>|U", $body, $arr);
//POST vkontakte.ru/login.php
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "op=slogin&redirect=1&expire=0&to=&s=".$arr[1][0]);
curl_setopt ($ch, CURLOPT_URL, 'http://vkontakte.ru/login.php');
$body = curl_exec($ch);
curl_close($ch);
//парсим mid и activityhash
preg_match_all("|<input\stype=\"hidden\"\sid=\"mid\"\svalue=\"(.+)\"\s/>|U", $body, $arr);
$userID = $arr[1][0];
preg_match_all("|<input type='hidden' id='activityhash' value='(.+)'>|U", $body, $arr);
$activityhash = $arr[1][0];
print("userID = $userID activityhash = $activityhash");
?>

Метки:cURL, login, login.vk.com, php-скрипт, vkontakte.ru, авторизация, вконтакте
 

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

Прокомментировать »

 
 
 

не могу зайти в контакт..(

 

$Email и $Password надо написать свои..
покажите лог сниффера

 

У меня пишет вот такую ошибку: Warning: preg_match_all() [function.preg-match-all]: Unknown modifier ‘|’ in /home/sseks315/public_html/test/vk.php on line 38
userID = 15841355 activityhash = 15841355

 

замени строку
preg_match_all(»|U», $body, $arr);

на

preg_match_all(»||U», $body, $arr);

Автору спасибо за скрипт)

 

хмм порезался код , короче в 38 строке после первой кавычки поставь |

 

Не получается… видать опять чета поменяли…
504-выдает nginx…
А нельзя без авторизации хапать странички под одним акком, подставляя куки?

 

перестала нажиматься кнопка Вход
всегда нажималась..
причем у всех в нашей сети..
Вирусов нет, файл host в порядке
браузер.. Опера, Мозила и др. на всех одинаково
Если не жать кнопку, а сразу после ввода пароля нажать Enter то начинаются затяжные попытки входа.. (минуты)
пока не надоест.. тогда жму автономный режим и вот только только многострадальческая страничка появляется.. Наполовину не рабочая
Помогите кто может?! )

 

[...] авторизации ВКонтакте на php уже как то раз рассказывал, но поскольку алгоритм снова изменился, напишу [...]

 

Прокомментировать

 
(will not be published)
 
 
Сообщение