PHP/MySQL | curl vk.com
Тема закрыта by
DELETED
![](/views/icon/no_avatar.png)
DELETED
Автор
3 января 2017, в 18:46
Delete
![Гг](https://bym.guru/modules/smiles/smiles/gg.gif)
________
посл. ред. 03.01.2017 в 18:46; всего 1 раз(а); by shadrvlad
shadrvlad, +
![](/views/icon/no_avatar.png)
DELETED
Автор
3 января 2017, в 18:51
Delete
![Гг](https://bym.guru/modules/smiles/smiles/gg.gif)
shadrvlad, через api vk авторизация?
![](/views/icon/no_avatar.png)
DELETED
Автор
3 января 2017, в 18:55
Delete
Зачем curl, если есть api? Музыку потыкать?
Получение значений lg_h и ip_h (работает, получает):
$url = 'http://vk.com';
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1)");
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'content-type: application/x-www-form-urlencoded',
'origin: http://vk.com ',
'referer: http://vk.com/ ',
));
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
$content = curl_exec($ch);
preg_match_all("/name=\"ip_h\" value=\"(.*?)\" \\//s", $content, $ip_h);
preg_match_all("/name=\"lg_h\" value=\"(.*?)\" \\//s", $content, $lg_h);
Отправка запроса авторизации вида:
http://login.vk.com/ ?
act=login&
role=al_frame&
_origin=http://vk.com&
ip_h=$ip_h&
lg_h=$lg_h&
email=<email>&
pass=<pass>
Сам скрипт:
$url = 'http://login.vk.com/?act=login';
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:42.0) Gecko/20100101 Firefox/42.0");
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
//curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_POST, true);
$data = array(
'act' => 'login',
'role' => 'al_frame',
'_origin' => 'http://vk.com',
'ip_h' => $ip_h[0][1][0],
'lg_h' => $lg_h[0][1][0],
'email' => '<email>',
'pass' => '<pass>'
);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'content-type: application/x-www-form-urlencoded',
'origin: http://vk.com ',
'referer: http://vk.com/ ',
));
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_COOKIEJAR, '/home/<user>/Development/vk/cookie.txt');
curl_setopt($ch, CURLOPT_COOKIEFILE, '/home/<user>/Development/vk/cookie.txt');
echo curl_exec($ch);
На выходе получаю следующее содержимое страницы:
<script type="text/javascript">
var _ua = navigator.userAgent;
var locDomain = 'vk.com'.match(/[a-zA-Z]+\.[a-zA-Z]+\.?$/)[0];
if (/opera/i.test(_ua) || !/msie 6/i.test(_ua) || document.domain != locDomain) {
document.domain = locDomain;
}
parent.__qlClear();
addEvent = parent.addEvent;
vk = parent.vk;
parent.stManager.add(['notifier.js', 'notifier.css'], function() {
Notifier = parent.Notifier;
parent.onLoginFailed(4, {email: ''});
});
</script>
В свою очередь куки принимают следующие значения:
Set-Cookie: remixmid=DELETED; expires=Thu, 01 Jan 1970 00:00:01 GMT; path=/; domain=.vk.com
Set-Cookie: remixsid=DELETED; expires=Thu, 01 Jan 1970 00:00:01 GMT; path=/; domain=.vk.com
Set-Cookie: remixsid6=DELETED; expires=Thu, 01 Jan 1970 00:00:01 GMT; path=/; domain=.vk.com
Set-Cookie: remixgid=DELETED; expires=Thu, 01 Jan 1970 00:00:01 GMT; path=/; domain=.vk.com
Set-Cookie: remixemail=DELETED; expires=Thu, 01 Jan 1970 00:00:01 GMT; path=/; domain=.vk.com
Set-Cookie: remixpass=DELETED; expires=Thu, 01 Jan 1970 00:00:01 GMT; path=/; domain=.vk.com
Set-Cookie: remixapi_sid=DELETED; expires=Thu, 01 Jan 1970 00:00:01 GMT; path=/; domain=.vk.com
Set-Cookie: remixpermit=DELETED; expires=Thu, 01 Jan 1970 00:00:01 GMT; path=/; domain=.vk.com
Set-Cookie: remixsslsid=DELETED; expires=Thu, 01 Jan 1970 00:00:01 GMT; path=/; domain=.vk.com
Смею предположить, что не удается передать значение email, т.к. в коде JS именно на это и ошибка. При ручном составлении URL и перехода по нему — успешное возвращение хэша и содержимое страницы следующее:
<script type="text/javascript">
var _ua = navigator.userAgent;
var locDomain = 'vk.com'.match(/[a-zA-Z]+\.[a-zA-Z]+\.?$/)[0];
if (/opera/i.test(_ua) || !/msie 6/i.test(_ua) || document.domain != locDomain) {
document.domain = locDomain;
}
parent.__qlClear();
addEvent = parent.addEvent;
vk = parent.vk;
parent.stManager.add(['notifier.js', 'notifier.css'], function() {
Notifier = parent.Notifier;
;(function () {
var cb = function () {Notifier.init({"queue_id":"events_queueXXX","timestamp":"1947616970","key":"XXX","uid":"XXX","version":9,"debug":false,"instance_id":"XXX","server_url":"http:\/\/q85.queuev4.vk.com\/im824","frame_path":"http:\/\/q85.queuev4.vk.com\/q_frame.php?7","frame_url":"im824","refresh_url":"http:\/\/vk.com\/notifier.php","fc":{"version":23,"state":{"clist":{"min":true,"x": XXX,"y":XXX},"tabs":[],"version":23},"state_hash":"XXX"}})}
if (window.vk && window.vk.loaded) cb(); else addEvent(window, 'DOMContentLoaded load', cb);
})();
parent.onLoginDone('/idXXX');
});
</script>
Авторизация проходит успешно. После доступен профиль пользователя.
$url = 'http://vk.com';
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1)");
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'content-type: application/x-www-form-urlencoded',
'origin: http://vk.com ',
'referer: http://vk.com/ ',
));
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
$content = curl_exec($ch);
preg_match_all("/name=\"ip_h\" value=\"(.*?)\" \\//s", $content, $ip_h);
preg_match_all("/name=\"lg_h\" value=\"(.*?)\" \\//s", $content, $lg_h);
Отправка запроса авторизации вида:
http://login.vk.com/ ?
act=login&
role=al_frame&
_origin=http://vk.com&
ip_h=$ip_h&
lg_h=$lg_h&
email=<email>&
pass=<pass>
Сам скрипт:
$url = 'http://login.vk.com/?act=login';
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:42.0) Gecko/20100101 Firefox/42.0");
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
//curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_POST, true);
$data = array(
'act' => 'login',
'role' => 'al_frame',
'_origin' => 'http://vk.com',
'ip_h' => $ip_h[0][1][0],
'lg_h' => $lg_h[0][1][0],
'email' => '<email>',
'pass' => '<pass>'
);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'content-type: application/x-www-form-urlencoded',
'origin: http://vk.com ',
'referer: http://vk.com/ ',
));
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_COOKIEJAR, '/home/<user>/Development/vk/cookie.txt');
curl_setopt($ch, CURLOPT_COOKIEFILE, '/home/<user>/Development/vk/cookie.txt');
echo curl_exec($ch);
На выходе получаю следующее содержимое страницы:
<script type="text/javascript">
var _ua = navigator.userAgent;
var locDomain = 'vk.com'.match(/[a-zA-Z]+\.[a-zA-Z]+\.?$/)[0];
if (/opera/i.test(_ua) || !/msie 6/i.test(_ua) || document.domain != locDomain) {
document.domain = locDomain;
}
parent.__qlClear();
addEvent = parent.addEvent;
vk = parent.vk;
parent.stManager.add(['notifier.js', 'notifier.css'], function() {
Notifier = parent.Notifier;
parent.onLoginFailed(4, {email: ''});
});
</script>
В свою очередь куки принимают следующие значения:
Set-Cookie: remixmid=DELETED; expires=Thu, 01 Jan 1970 00:00:01 GMT; path=/; domain=.vk.com
Set-Cookie: remixsid=DELETED; expires=Thu, 01 Jan 1970 00:00:01 GMT; path=/; domain=.vk.com
Set-Cookie: remixsid6=DELETED; expires=Thu, 01 Jan 1970 00:00:01 GMT; path=/; domain=.vk.com
Set-Cookie: remixgid=DELETED; expires=Thu, 01 Jan 1970 00:00:01 GMT; path=/; domain=.vk.com
Set-Cookie: remixemail=DELETED; expires=Thu, 01 Jan 1970 00:00:01 GMT; path=/; domain=.vk.com
Set-Cookie: remixpass=DELETED; expires=Thu, 01 Jan 1970 00:00:01 GMT; path=/; domain=.vk.com
Set-Cookie: remixapi_sid=DELETED; expires=Thu, 01 Jan 1970 00:00:01 GMT; path=/; domain=.vk.com
Set-Cookie: remixpermit=DELETED; expires=Thu, 01 Jan 1970 00:00:01 GMT; path=/; domain=.vk.com
Set-Cookie: remixsslsid=DELETED; expires=Thu, 01 Jan 1970 00:00:01 GMT; path=/; domain=.vk.com
Смею предположить, что не удается передать значение email, т.к. в коде JS именно на это и ошибка. При ручном составлении URL и перехода по нему — успешное возвращение хэша и содержимое страницы следующее:
<script type="text/javascript">
var _ua = navigator.userAgent;
var locDomain = 'vk.com'.match(/[a-zA-Z]+\.[a-zA-Z]+\.?$/)[0];
if (/opera/i.test(_ua) || !/msie 6/i.test(_ua) || document.domain != locDomain) {
document.domain = locDomain;
}
parent.__qlClear();
addEvent = parent.addEvent;
vk = parent.vk;
parent.stManager.add(['notifier.js', 'notifier.css'], function() {
Notifier = parent.Notifier;
;(function () {
var cb = function () {Notifier.init({"queue_id":"events_queueXXX","timestamp":"1947616970","key":"XXX","uid":"XXX","version":9,"debug":false,"instance_id":"XXX","server_url":"http:\/\/q85.queuev4.vk.com\/im824","frame_path":"http:\/\/q85.queuev4.vk.com\/q_frame.php?7","frame_url":"im824","refresh_url":"http:\/\/vk.com\/notifier.php","fc":{"version":23,"state":{"clist":{"min":true,"x": XXX,"y":XXX},"tabs":[],"version":23},"state_hash":"XXX"}})}
if (window.vk && window.vk.loaded) cb(); else addEvent(window, 'DOMContentLoaded load', cb);
})();
parent.onLoginDone('/idXXX');
});
</script>
Авторизация проходит успешно. После доступен профиль пользователя.
![](/views/icon/no_avatar.png)
DELETED
Автор
4 января 2017, в 8:08
Delete
punkromain (04.01.2017 в 03:36)
Зачем curl, если есть api? Музыку потыкать?
Зачем curl, если есть api? Музыку потыкать?
зачем оффтопить если можно промолчать?
![](/views/icon/no_avatar.png)
DELETED
Автор
4 января 2017, в 8:23
Delete
punkromain, +