Sergo_Sev
Творец
- Регистрация
- 14 Июн 2008
- Сообщения
- 578
- Реакции
- 193
- Автор темы
- #1
Нашел рабочий код для авторизации в контакте, который нужно использовать, что бы спарсить список адресов
Как я понял, скрипт работает так - авторизация >>> берем первую страницу, снова авторизация >>> берем вторую и т.д. но если мы уже авторизованы и у нас записаны cookie, то логична такой порядок - авторизация >>> берем первую страницу, берем вторую и т.д.
В общем подскажите решение по этому вопросу и еще - cookie для должны быть вида
Но remixsid не записывается, приходится брать из браузера (remixsid кажется выдается перед авторизацией, в отличии от ого, что сохраняется в cookie.txt)
Как я понял, скрипт работает так - авторизация >>> берем первую страницу, снова авторизация >>> берем вторую и т.д. но если мы уже авторизованы и у нас записаны cookie, то логична такой порядок - авторизация >>> берем первую страницу, берем вторую и т.д.
В общем подскажите решение по этому вопросу и еще - cookie для должны быть вида
Код:
.vk.com TRUE / FALSE 1410257008 remixlang 0
#HttpOnly_.login.vk.com TRUE / TRUE 1410257008 p ******************************************
.vk.com TRUE / FALSE 1410257008 remixsid **************************************
Но remixsid не записывается, приходится брать из браузера (remixsid кажется выдается перед авторизацией, в отличии от ого, что сохраняется в cookie.txt)
PHP:
// Функция, которая позволяет нам переходить по редиректам с включенной опцией open_basedir
function curl_redirect_exec($ch, $redirects = 0, $curlopt_returntransfer = true, $curlopt_maxredirs = 10, $curlopt_header = false) {
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$data = curl_exec($ch);
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$exceeded_max_redirects = $curlopt_maxredirs > $redirects;
$exist_more_redirects = false;
if ($http_code == 301 || $http_code == 302) {
if ($exceeded_max_redirects) {
list($header) = explode("\r\n\r\n", $data, 2);
$matches = array();
preg_match('/(Location:|URI:)(.*?)\n/', $header, $matches);
$url = trim(array_pop($matches));
$url_parsed = parse_url($url);
if (isset($url_parsed)) {
curl_setopt($ch, CURLOPT_URL, $url);
$redirects++;
return curl_redirect_exec($ch, $redirects, $curlopt_returntransfer, $curlopt_maxredirs, $curlopt_header);
}
}
else {
$exist_more_redirects = true;
}
}
if ($data !== false) {
if (!$curlopt_header)
list(,$data) = explode("\r\n\r\n", $data, 2);
if ($exist_more_redirects) return false;
if ($curlopt_returntransfer) {
return $data;
}
else {
echo $data;
if (curl_errno($ch) === 0) return true;
else return false;
}
}
else {
return false;
}
}
function f1( $url)
{
$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 = 'user_name@mail.ru';
$password = 'password';
$ch = curl_init();
// чтобы сайт думал, что мы - браузер:
curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);
// ответ сервера будем записывать в переменную
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
//curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch,CURLOPT_REFERER,'http://m.vk.com/login?fast=1&hash=&s=0&to=');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_COOKIEFILE, dirname(__FILE__) . '/cookie.txt');
curl_setopt($ch, CURLOPT_COOKIEJAR, dirname(__FILE__) . '/cookie.txt');
curl_setopt($ch, CURLOPT_POST, false);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_URL, 'https://login.vk.com/?act=login&from_host=m.vk.com&from_protocol=http&ip_h=&pda=1');
$answer = curl_redirect_exec($ch);
//формируем запрос
$post = array(
'email' => $login,
'pass' => $password
);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post));
// собственно этот ответ сервера уже доказывает что мы авторизировались
$answer = curl_redirect_exec($ch);
curl_setopt($ch, CURLOPT_POST, false);
// укажем страницу, с которой мы получим данные для проверки. она может быть как с мобильного так и с основного сайта
curl_setopt($ch, CURLOPT_URL, $url);
$answer = curl_redirect_exec($ch);
// echo $answer; // здесь уже обрабатываем ответ как нам нужно.
curl_close($ch);
return $answer;
}
$array_url[] = "http://vk.com/albums-283";
$array_url[] = "http://vk.com/club27191908";
foreach($array_url as $id => $url){
echo f1($url);
}