[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как залогиниться вконтакте? php+curl
voron23
Помогите пожалуйста.
Пытаюсь залогиниться,получается, но просит вести последнии 4 цифры моб.телефона.
Делал так:
$user_agent = 'Mozilla/5.0 (Windows; U; Windows NT 6.0; ru; rv:1.9.2.13) ' . 
'Gecko/20101203 Firefox/3.6.13 ( .NET CLR 3.5.30729)';

$cookie = '';

$login = 'логин';
$password = 'пароль';

$ch = curl_init();

// true т.к. мы будем отправлять post запрос:
curl_setopt($ch, CURLOPT_POST, true);

// чтобы сайт думал, что мы - браузер:
curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);

// ответ сервера будем записывать в переменную
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($ch, CURLOPT_TIMEOUT, 10);

// по редиректам будем переходить автоматически.
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

curl_setopt($ch, CURLOPT_URL, 'http://login.vk.com/?act=login');

//Формирование запроса таким образом, я счел более наглядным
$post = array(
'act' => 'login',
'q' => '',
'al_frame' => '1',
'expire' => '',
'captcha_sid' => '',
'captcha_key' => '',
'from_host' => 'vkontakte.ru',
'email' => $login,
'pass' => $password
);

curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post));

curl_setopt($ch, CURLOPT_COOKIEJAR, $_SERVER['DOCUMENT_ROOT'].'/cookie.txt');

$answer = curl_exec($ch);


$sid = substr($answer, strpos($answer, "setCookieEx('sid', '") + 20, 60);
$cookie = 'remixsid=' . $sid;

curl_setopt($ch, CURLOPT_POST, false);
curl_setopt($ch, CURLOPT_COOKIE, $cookie);

curl_setopt($ch, CURLOPT_URL, 'http://vkontakte.ru/login.php?act=security_check&al=1&al_page=3&code=4 цифры м/т&hash=мой хэш(полученный при авторизации)');

curl_setopt($ch, CURLOPT_COOKIEFILE, $_SERVER['DOCUMENT_ROOT'].'/cookie.txt');

// укажем страницу, с которой мы получим данные для проверки
curl_setopt($ch, CURLOPT_URL, 'http://vkontakte.ru/');

$answer = curl_exec($ch);

echo $answer;

curl_close($ch);


Помогите пожалуйста. Заранее благодарю.



Спустя 4 часа, 16 минут, 3 секунды (7.10.2011 - 20:33) walerus написал(а):
Он и будет просить, т.к. скорее всего заходили раньше не с твоего IP/страны
Это первая причина.

Спустя 36 минут, 29 секунд (7.10.2011 - 21:09) voron23 написал(а):
Цитата (walerus @ 7.10.2011 - 17:33)
Он и будет просить, т.к. скорее всего заходили раньше не с твоего IP/страны
Это первая причина.

Это я уже понял.У меня не получается отправить второй запрос, в котором есть куки,хэш и последнии 4 цифры моб.телефона

Спустя 3 минуты, 58 секунд (7.10.2011 - 21:13) Игорь_Vasinsky написал(а):
Так значит нужно процедуру авторизации повторить 2 раза

1. Обычная авторизация
2. 4 цифры мобилы

И обработчики у них разные, след-но и запросы посылать нужно в разные места.

Может поможет http://phpforum.ru/index.php?showtopic=50868

Спустя 45 минут, 47 секунд (7.10.2011 - 21:59) voron23 написал(а):
Спасибо за советы, завтра попробую wink.gif

Спустя 50 минут, 23 секунды (7.10.2011 - 22:49) voron23 написал(а):
Вопросик как с помощью curla отправить запрос на https://?

Спустя 5 минут, 28 секунд (7.10.2011 - 22:55) Игорь_Vasinsky написал(а):
А гугл?

Цитата
Совместное испозование PHP, cURL, протокола HTTPS и Cookie часть 1
Данная заметка не претендует на исчерпывающее руководство по PHP, cURL, протоколу HTTPS и Cookie. Если Вы ищеете такую информацию, то заходите на официальные сайты или ищите в Google ;)
Просто хотелось показать один из можных варинатов решения поставленной задачи: необходимо заходить роботом использующим cURL по протоколу HTTPS методом POST, выполнять действия в системе и выходить из системы. Данные о сессии пользователя хранятся в Cookie.
Я не буду вдаваться в подробности и публиковать полное решение, но выложу пример связки PHP + cURL + работа по протоколу HTTPS методом POST, а так же работа с данными Cookie.
Приведу часть примера, которая может решаеть подобную задачу:

// вход в систему
// имя хоста, куда будем заходить

$hostname = 'your.seruce.host.com';
// инициализация cURL
$ch = curl_init('https://'.$hostname.'/index.php');
// получать заголовки
curl_setopt ($ch, CURLOPT_HEADER, 1);
// если ведется проверка HTTP User-agent, то передаем один из возможных допустимых вариантов:
curl_setopt ($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3');
// елси проверятся откуда пришел пользователь, то указываем допустимый заголовок HTTP Referer:
curl_setopt ($ch, CURLOPT_REFERER, 'https://'.$hostname.'/index.php');
// использовать метод POST
curl_setopt ($ch, CURLOPT_POST, 1);
// сохранять информацию Cookie в файл, чтобы потом можно было ее использовать
curl_setopt ($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
// передаем поля формы
curl_setopt ($ch, CURLOPT_POSTFIELDS, 'user=your_robot&pass=Your_R0b0t!PassWd1&mod=Login');
// возвращать результат работы
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
// не проверять SSL сертификат
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0);
// не проверять Host SSL сертификата
curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0);
// это необходимо, чтобы cURL не высылал заголовок на ожидание
curl_setopt ($ch, CURLOPT_HTTPHEADER, array('Expect:'));
// выполнить запрос
curl_exec ($ch);
// получить результат работы
$result = curl_multi_getcontent ($ch);
// вывести результат
echo "\n".'Login OK'."\n".'[result ===8<===>'."\n".$result."\n".'<===>8=== result]'."\n";
// закрыть сессию работы с cURL
curl_close ($ch);

Цитата
Вот мы и вошли в систему. ID сессии, которая передается в Cookie храним в файле, который мы передали в параметре CURLOPT_COOKIEJAR. Результат работы: заголовки + тело страницы получаем и выводим из переменной $result. Пока сессия не закончится можем выполнять необходимые действия в системе.
Если вывод будет идти в командную строку Windows, а кодировка системы с которой идет работа: cp1251, то можно воспользоваться спобом описанным в заметке "chcp - изменение кодовой страницы cmd.exe", чтобы видеть вывод в нормальной кодовой странице, а не древнечукотские манскрипты cp866 установленной по-умолчанию в командном интепретаторе.
Для начала хватит. Может быть напишу как-нибудь продолжение (если кому-то это будет интересно). В этом примере отсутсвует обработка возможных ошибок. Ее необходимо добавить в реальный пример. Код примера тупо без разбора не рекомендую использовать. Но если почитать документацию, то можно на основе этого примера решать задачи подобные той, что была описана выше.

Спустя 5 минут, 29 секунд (7.10.2011 - 23:00) voron23 написал(а):
Спасибо, О Всемогущий, на сонную голову лучше бы я этим не занимался smile.gif

Спустя 1 минута, 51 секунда (7.10.2011 - 23:02) Игорь_Vasinsky написал(а):
Цитата
на сонную голову лучше бы я этим не занимался


действительно...

Спустя 23 минуты, 53 секунды (7.10.2011 - 23:26) voron23 написал(а):
Вот что то попробовал сделать... вот что получилось:
<?php
$user_agent = 'Mozilla/5.0 (Windows; U; Windows NT 6.0; ru; rv:1.9.2.13) ' .
'Gecko/20101203 Firefox/3.6.13 ( .NET CLR 3.5.30729)';

$cookie = '';

$login = 'логин';
$password = 'пароль';

$ch = curl_init();
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_URL, 'http://login.vk.com/?act=login');
$post = array(
'act' => 'login',
'q' => '',
'al_frame' => '1',
'expire' => '',
'captcha_sid' => '',
'captcha_key' => '',
'from_host' => 'vkontakte.ru',
'email' => $login,
'pass' => $password
);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post));
curl_setopt($ch, CURLOPT_COOKIEJAR, $_SERVER['DOCUMENT_ROOT'].'/cookie.txt');
$answer = curl_exec($ch);
$sid = substr($answer, strpos($answer, "setCookieEx('sid', '") + 20, 60);
$cookie = 'remixsid=' . $sid;
curl_setopt($ch, CURLOPT_POST, false);
curl_setopt($ch, CURLOPT_COOKIE, $cookie);
curl_setopt($ch, CURLOPT_COOKIEFILE, $_SERVER['DOCUMENT_ROOT'].'/cookie.txt');
$answer = curl_exec($ch);
echo $answer;

curl_setopt ($ch, CURLOPT_HEADER, 1);
curl_setopt ($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3');
curl_setopt ($ch, CURLOPT_REFERER, 'http://google.com/');
curl_setopt ($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_URL, 'https://login.vk.com');
$post = array(
'act' => 'security_check',
'al' => '1',
'al_page' => '3',
'code' => 'последнии 4 цифры моб.тел',
'hash' => 'хэш'
);
curl_setopt($ch, CURLOPT_POST, false);
curl_setopt($ch, CURLOPT_COOKIE, $cookie);
curl_setopt($ch, CURLOPT_COOKIEFILE, $_SERVER['DOCUMENT_ROOT'].'/cookie.txt');
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt ($ch, CURLOPT_HTTPHEADER, array('Expect:'));
curl_exec ($ch);
curl_setopt($ch, CURLOPT_URL, 'http://vkontakte.ru/');
curl_close ($ch);
?>

Залогиниться так и не получилось :D

Спустя 8 минут, 22 секунды (7.10.2011 - 23:34) Игорь_Vasinsky написал(а):
1я попытка 2 раза прописал зачем с разными параметрами?
Цитата
curl_setopt($ch, CURLOPT_POST, true); 

Цитата
curl_setopt($ch, CURLOPT_POST, false);



Ты так же отправляешь?
Цитата
            'code' => 'последнии 4 цифры моб/телефона',
            'hash' => 'хэш полученный при авторизации'

Спустя 7 минут, 13 секунд (7.10.2011 - 23:42) voron23 написал(а):
Цитата (Игорь_Vasinsky @ 7.10.2011 - 20:34)
1я попытка 2 раза прописал зачем с разными параметрами?
Цитата
curl_setopt($ch, CURLOPT_POST, true); 

Цитата
curl_setopt($ch, CURLOPT_POST, false);



Ты так же отправляешь?
Цитата
             'code' => 'последнии 4 цифры моб/телефона',
             'hash' => 'хэш полученный при авторизации'

в первый раз Post true, потому что я буду использовать только метод Post, а во второй Post false, потому что будет использоваться метод Get при отправке куков, это я где то прочитал там то же был способ залогивания.
'code' =>'9310',
'hash' =>'7f41038375994a2153'
отправлял так smile.gif

А насчёт ссылки, именно этим скриптом изначально и пользовался, авторизовывалось, да и сейчас авторизуется,только просит последнии 4 цифры моб.тел. и хэш

Спустя 5 минут, 10 секунд (7.10.2011 - 23:47) Игорь_Vasinsky написал(а):
ты отслеживаешь с httpfox? куда POST слать?

Спустя 32 секунды (7.10.2011 - 23:47) Игорь_Vasinsky написал(а):
а что возращается то?

Спустя 24 минуты, 57 секунд (8.10.2011 - 00:12) voron23 написал(а):
В httpfox в post пусто почему то, возвращает лишь титл страницы "Добро пожаловать" если дописать в конце кода:
$text = file_get_contents("vkontakte.ru");
preg_match('|<title>(.*)</title>|Uis', $text, $item);
echo $item['1'];

Спустя 11 часов, 17 минут, 3 секунды (8.10.2011 - 11:29) voron23 написал(а):
Способом тыка, и кучей разных кривых скриптов, каким то непонятным образом получилось biggrin.gif Всем Спасибо за советы.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.