Форум программистов, компьютерный форум, киберфорум
PHP: сети
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/34: Рейтинг темы: голосов - 34, средняя оценка - 4.88
1 / 1 / 1
Регистрация: 14.10.2015
Сообщений: 29

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

17.03.2016, 08:52. Показов 7144. Ответов 6

Студворк — интернет-сервис помощи студентам
Предоставляю Вам готовый скрипт для авторизации в сети ВКонтакте без её API, а по Логину и Паролю.
На момент создания сообщения он актуален и проверен.
Откорректировать под себя лучше всего там, где я указал, так как каждая строка в нем важна и может все рухнуть.
Лежит у меня уже несколько лет, ВК все обновляется, а я вместе с ним. Так как в интернете гуглил и ничего попутного не нашел, решил помочь тем, кто нуждается.
Надеюсь для кого-то, но сократит уйму времени на поиск.
Если вопросы есть, задавайте.(Только не много :-) )
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
$cookie = ''; //переменная нужна для сохранения печенек
 
 
    function pageVK(/*Передавайте параметры, если нужно*/) {
        global $cookie;   
        $curl = curl_init();
        curl_setopt($curl,CURLOPT_RETURNTRANSFER, true);      
        curl_setopt($curl,CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($curl,CURLOPT_SSL_VERIFYHOST, false);
        curl_setopt($curl,CURLOPT_AUTOREFERER, true);
        curl_setopt($curl,CURLOPT_POST, true);
        curl_setopt($curl,CURLOPT_COOKIEFILE, "cookiefile");
        curl_setopt($curl,CURLOPT_COOKIE, $_COOKIE['Cookie_Login']);
        curl_setopt($curl,CURLOPT_NOBODY, false);
        curl_setopt($curl,CURLOPT_HEADER, true);
        curl_setopt($curl,CURLOPT_ENCODING, "");
        curl_setopt($curl,CURLOPT_TIMEOUT, 30);
        curl_setopt($curl,CURLOPT_CONNECTTIMEOUT, 30);
        curl_setopt($curl,CURLOPT_MAXREDIRS, 5);
        curl_setopt($curl, CURLOPT_HTTPHEADER, array('Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8', 'Accept-Encoding:gzip, deflate, sdch', 'Accept-Language: ru', 'Accept-Charset: utf-8', 'user-agent: Opera/9.1(Opera Mini/7.1)'));
        curl_setopt($curl,CURLOPT_URL, 'тут внутренняя страница вконтакте к которой Вам нужен доступ');
        curl_setopt($curl,CURLOPT_POSTFIELDS, null);
        $page = curl_execR($curl);
        
        //Ну а тут делайте свое грязное дело :-)
 
    }
    
    function checkLoginVk($Login, $Password) {
        global $cookie;   
        $curl = curl_init();
        curl_setopt($curl,CURLOPT_RETURNTRANSFER, true);      
        curl_setopt($curl,CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($curl,CURLOPT_SSL_VERIFYHOST, false);
        curl_setopt($curl,CURLOPT_AUTOREFERER, true);
        curl_setopt($curl,CURLOPT_POST, true);
        curl_setopt($curl,CURLOPT_COOKIEFILE, "cookiefile");
        curl_setopt($curl,CURLOPT_COOKIE, $_COOKIE['Cookie_Login']);
        curl_setopt($curl,CURLOPT_NOBODY, false);
        curl_setopt($curl,CURLOPT_HEADER, true);
        curl_setopt($curl,CURLOPT_ENCODING, "");
        curl_setopt($curl,CURLOPT_TIMEOUT, 30);
        curl_setopt($curl,CURLOPT_CONNECTTIMEOUT, 30);
        curl_setopt($curl,CURLOPT_MAXREDIRS, 5);
        curl_setopt($curl, CURLOPT_HTTPHEADER, array('Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8', 'Accept-Encoding:gzip, deflate, sdch', 'Accept-Language: ru', 'Accept-Charset: utf-8', 'user-agent: Opera/4.1(Opera Mini/7.1)')); //Заголовки можете поизменять, но User-Agent всегда оставляйте мобильный. Как никак в мобильной версии ВК все задачи делаются намного проще, чем в полной.
        curl_setopt($curl,CURLOPT_URL, 'https://m.vk.com/login?role=fast&to=&s=1&m=1&email='.$Login);
        curl_setopt($curl,CURLOPT_POSTFIELDS, null);
        $page = curl_execR($curl);
        preg_match("/<form method=\"post\" action=\"(.*?)\" novalidate>/",$page, $hash); //Регулярку можно подправить чтоб работала наверника и novalidate убрать. А вообще, все регулярки требуют либо контроля, либо обновления на многозадачные, а то если ВК изменит одну цифру или букву в некоторых местах, скрипт падёт :-(   
        curl_setopt($curl,CURLOPT_URL, $hash[1]);
        curl_setopt($curl,CURLOPT_COOKIE, $cookie);
        curl_setopt($curl,CURLOPT_POSTFIELDS, http_build_query(array('email' => $Login, 'pass' => $Password)));
        $page = curl_execR($curl);
        curl_setopt($curl,CURLOPT_URL, 'https://m.vk.com/feed'); //Тут можно указать любую страницу авторизованного юзера
        curl_setopt($curl,CURLOPT_COOKIE, $cookie);
        $page = curl_execR($curl);
        
        $CheckAuth = preg_match("/<a.*?href=\"https:\/\/login\.vk\.com\/\?act=logout(.*?)\">/",$page); //Проверка регулярками, что мы вошли. Единственное что нужно парсить, это кнопка выход. Она всегда у авторизованного юзера будет :-)
        $checkSecure = preg_match('/id=\"security_check\"/', $page); //В моем случае попадалось много аккаунтов других стран, а точнее Украины. Естественно ВК попросит ввести цифры от телефона, это как раз проверка ))
        if($checkSecure) {
                $code = NumericPhoneVk($Login);
                preg_match("/hash: '(.*?)'/",$page, $hash);
                curl_setopt($curl,CURLOPT_URL, 'http://vk.com/login.php?act=security_check'); //Ввод недостающих цифр может хромать, так как оживил скрипт только недавно, а последний раз он у меня работал с вводом кода еще в далеком 2015-м году )))))
                curl_setopt($curl,CURLOPT_POSTFIELDS, http_build_query(array('code' => $code, 'to' => '', 'al_page' => '3', 'hash' => $hash[1])));
                $page = curl_execR($curl);      
        }
        if($CheckAuth) {
            SetCookie("Cookie_Login", deleteCopyCookies($cookie), time()+3600); //Куки служат для хранения кук, как глупо это бы не звучало. На серверных решениях Вы можете хранить их в БД и т.д.
            curl_setopt($curl, CURLOPT_URL, 'https://vk.com/id0'); //Мне нужно было имя юзера, поэтому id0 спокойно с этим справляется)))
            curl_setopt($curl,CURLOPT_COOKIE, $cookie);
            $page = curl_execR($curl);
            if(mb_check_encoding($page, 'Windows-1251') && !mb_check_encoding($page, 'UTF-8')) { $page = mb_convert_encoding($page, 'UTF-8', 'Windows-1251'); } //Какие бы заголовки я в запросе не кидал, ВК все же на кирилице отдает текст, поэтому я его конвертирую в любимую UTF-8 :-)
            preg_match("/<title>(.*?)<\/title>/", $page, $user); 
            $data = array('login' => 'ok', 'msg'=> $user[1]);
        } else { $data = array('login' => 'fail', 'msg'=> "Неправильный логин или пароль"); }
        curl_close($curl);
        
        return $data; //Я возвращаю массив, Вы можете переписать под себя, как угодно.
    }
    
    
    function curl_execR($curl) {            //альтернативная функция curl_exec для эмуляции CURLOPT_FOLLOWLOCATION (Для тех, кто пользуется халявными хостингами, где оригинальной функции нет)
        global $cookie;
        $loops = 0;
        $max_loops = 10;
            if ($loops++ >= $max_loops) { $loops = 0;  FALSE; } 
        $data = curl_exec($curl);
        preg_match_all('/Set-Cookie: (.*?; )/', $data, $cookieArr);
        for($i=0;  $i<count($cookieArr[1]); $i++) {
            $cookie = $cookie.$cookieArr[1][$i];
        }
        $temp = $data;
        list($header, $data) = explode("\n\n", $data, 2);
        $http = curl_getinfo($curl, CURLINFO_HTTP_CODE);
        if ($http == 301 || $http == 302) {
            $matches = array();
            preg_match('/Location:(.*?)\n/', $header, $matches);
            $url = @parse_url(trim(array_pop($matches)));
            if (!$url) { $loops = 0; return $data; }
            $last_url = parse_url(curl_getinfo($curl, CURLINFO_EFFECTIVE_URL));
            if (!$url['scheme'])
            $url['scheme'] = $last_url['scheme'];
            if (!$url['host'])
            $url['host'] = $last_url['host'];
            if (!$url['path'])
            $url['path'] = $last_url['path'];
            $new_url = $url['scheme'] . '://' . $url['host'] . $url['path'] . ($url['query']?'?'.$url['query']:'');
            curl_setopt($curl, CURLOPT_URL, $new_url);
            return curl_execR($curl);
        } else { $loops=0; return $temp; }
    }   
    
    
    //Удаление повторяющихся Cookies из строки (Совсем не обязательная, но я люблю чтоб все как надо было)
    function deleteCopyCookies($cookieStr) {
        $cookieKV = array();
        $cookieStrS = '';
        $cookieStr = str_replace(array("\r\n", "\n", "\r", " "), "", $cookieStr);
        $cookieArray = explode(";",$cookieStr);
        $cookieArray = array_filter($cookieArray);
            foreach($cookieArray as $item) {
                $arr = explode('=', $item);
                $cookieKV[$arr[0]] = $arr[1];
            }
            foreach ($cookieKV as $key => $value) {
                $cookieStrS = $cookieStrS.$key.'='.$value.'; ';
            }
        return ($cookieStrS !== '') ? $cookieStrS : false;
    }
 
 
    //Проверка страны мобильного номера ВКонтакте(Сюда Вы можете дописать нужные страны)
    function BringPhoneVk($phone) {
        $sim = substr($phone, 0, 1);
        if($sim == '+') { $phone = substr($phone, 1); }
        $prifixRus = substr($phone, 0, 1);
        $prifixUkr = substr($phone, 0, 2);
            if($prifixRus == '7' || $prifixRus == '8') { $phone = array('tel' => $phone, 'country' => 'Russia'); }
                else if($prifixUkr == '38') { $phone = array('tel' => $phone, 'country' => 'Ukraine'); }
                    else { $phone = array('tel' => $phone, 'country' => 'Unknown'); }
        return $phone;
    }
    
    //Вывод недостающих цифр мобильного номера ВКонтакте(Соответственно тоже нужно будет подкорректировать при добавлении стран)
    function NumericPhoneVk($phone) {
        $phone = BringPhoneVk($phone);
        if(is_array($phone) && array_key_exists('tel', $phone) && array_key_exists('country', $phone)) {
            if($phone['country'] == 'Russia') {
                $numeric = substr($phone['tel'], 1, 8);
            } else if($phone['country'] == 'Ukraine') {
                $numeric = substr($phone['tel'], 1, 9);
                } else if($phone['country'] == 'Unknown') { 
                    $numeric = $phone['tel'];
                    } else { $numeric = 'Страны не существует'; }
        } else { $numeric = 'Ошибка!'; }
        return $numeric;
    }
        
        
//В принципе все. Я свой функционал отсюда вырезал, если нужна будет помощь, пишите.
//Работаем следующим образом
//-Вызываем checkLoginVk с параметрами, проверяем на успех, если все норм, то вызываем pageVK и работаем уже под данным юзером :-)
 
//О недостатках если заметили, говорите. Будет полезно Ваше мнение. На данный момент знаю один неприятный - это каптча. Хотя, где то валяется скрипт позволяющий ее обойти(предварительно введя).
//Заметил что она появляется спустя большое кол-во неправильных входов. Впрочем это везде так. Защита.
//Ну на этом все, если что в теме пишите
1
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.03.2016, 08:52
Ответы с готовыми решениями:

Авторизация curl (различие между curl и ajax запросами)
Есть ли различие в передаче данных в json формате через curl и ajax? Я хочу написать запрос, который будет авторизировать пользователя на...

Aвторизация вконтакте, curl
&lt;?PHP set_time_limit(0); $mail=''; $pass=''; function go($link, $cookie){ $ch = curl_init(); curl_setopt($ch,...

Curl авторизация
Здравствуйте подскажите как через курл сделать авторизацию на сайте? Отправляем на сайт для авторизации такие вот значения: ...

6
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
17.03.2016, 10:03
1. Какие плюсы работы "без API", по сравнению с работой "с API"? Я вижу только уйму минусов.
2. Что может скрипт кроме факта авторизации? Как тут отправить сообщение, посмотреть сообщения, посмотреть список звукозаписей и т.д., какие-нибудь примеры работы не помешали бы когда выкладываете такое.
0
1 / 1 / 1
Регистрация: 14.10.2015
Сообщений: 29
17.03.2016, 10:11  [ТС]
Вот как раз для отправки сообщения и создавался. Код который вырезал это и есть. В принципе могу добавить.
А API мне не подходит по одной причине - Логин и Пароль. Как додумаются в ВКонтакте сделать вход не по AccessToken и прочему, тогда буду все делать через API.
0
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
17.03.2016, 15:19
Цитата Сообщение от Ярослав217 Посмотреть сообщение
А API мне не подходит по одной причине - Логин и Пароль.
А Ваш скрипт как авторизуется, по отпечатку пальца?
Цитата Сообщение от Ярослав217 Посмотреть сообщение
Как додумаются в ВКонтакте сделать вход не по AccessToken и прочему
А как надо?
0
1 / 1 / 1
Регистрация: 14.10.2015
Сообщений: 29
17.03.2016, 21:03  [ТС]
По данным, которые привычны обычным смертным
0
 Аватар для mz3joker
0 / 0 / 0
Регистрация: 15.03.2016
Сообщений: 3
28.03.2016, 13:31
Спасибо, третью неделю ищу норм скрипт. Я сам новичок и не так сильно шарю в PHP.
Вот все пытаюсь разобраться в вашем скрипте, подставляю к переменным $Login, $Password свои данные, и пытаюсь хоть что то вывести на экран (memo1). так же выдает ошибку на 27 стр. закрытие функции, может что то вписать надо чтобы не ругался на нее "function pageVK(/*Передавайте параметры, если нужно*/)" - или не объязательно в скобках что то писать, че за параметры желательно указать?
0
0 / 0 / 0
Регистрация: 17.03.2016
Сообщений: 2
04.05.2018, 15:33
Ярослав217, Здравствуйте. Скрипт не авторизовывает помогите там похоже сто то с регуляркой
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.05.2018, 15:33
Помогаю со студенческими работами здесь

Curl авторизация
Всем привет. Необходимо авторизоваться на сайте с помощью Curl. $curl = curl_init(); curl_setopt($curl, CURLOPT_COOKIESESSION,...

Авторизация curl
Всем добрый день! Возникла проблема, мне нужно проверять данные на сайте, чтобы их посмотреть нужно авторизоваться, можно ли как то 1...

CURL авторизация
Здравствуйте. Хотел сделать парсер баланса с teasernet.com с помощью cURL но не работает авторизация почему то. Вот код класса: &lt;? ...

CURL авторизация QIWI
Не получается получить страницу. Вроде являюсь авторизованным по Json ответу т.к если задать неверный логин, то в Json ответе так и...

Авторизация на сайте. CURL
Привет! Пытаюсь сделать авторизацию на сайте через CURL. Не могу понять на чем ловит меня сайт что я бот. Методом тыка смог отловить только...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru