вторник, 14 сентября 2010 г.

Старый скрипт авторизации vKontakte

Старый скрипт использующий авторизацию вконтакте, т.е. сначала авторизовывались, а потом дергали данные с других страниц.
После смены куков и авторизации через login.vk.com,авторизация перестала работать.
// Пользовательские данные
$email='mail@mail.ru';
$pass='password';
$user_agent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11";

// Соединяемся с сервером ВКонтакте.ру
$fp=fsockopen("vkontakte.ru",80,$errno,$errstr,10);
if (!fp) {die("vkontakte.ru недоступен");}

// Авторизуемся
$out = "GET /login.php?email=".$email."&pass=".$pass." HTTP/1.0\r\n";
$out .= "Host: vkontakte.ru\r\n";
$out .= "User-Agent: ".$user_agent."\r\n";
$out .= "Cookie: income=1\r\n";
$out .= "Content-Type:text/xml; charset=windows-1251\r\n\r\n";
fwrite($fp,$out);
$ans='';
while(!feof($fp))
{
$ans.=fgets($fp,128);
}
fclose($fp);

// Вытаскиваем кукисы из ответа сервера
preg_match("/revalidate(.*?)Location/is", $ans, $cookies);
$cookies = str_replace("Set-Cookie: ", "",$cookies[1]);
preg_match("/remixchk(.*?);/is", $cookies, $cook1);
preg_match("/remixmid(.*?);/is", $cookies, $cook2);
preg_match("/remixemail(.*?);/is", $cookies, $cook3);
preg_match("/remixpass(.*?);/is", $cookies, $cook4);
$cook1 = "remixchk=".$cook1[1]."; ";
$cook2 = "remixmid=".$cook2[1]."; ";
$cook3 = "remixemail=".$cook3[1]."; ";
$cook4 = "remixpass=".$cook4[1]."; ";
$acook = $cook1.$cook2.$cook3.$cook4;
$acook = str_replace ("==", "=", $acook);

// Определяем ID юзера
$user_id = strstr($cook2, '==');
$user_id = substr($user_id, 2,-2);

// Если мы успешно авторизовались - начинаем грабить
if($user_id!='')
{
echo "Авторизация прошла успешно
";
// Получаем список всех фотографий
$fp=fsockopen("vkontakte.ru",80,$errno,$errstr,10);
$out = "GET /photos.php?act=user&id=".$user_id." HTTP/1.0\r\n"; //грабим страницу.
$out .= "Host: vkontakte.ru\r\n";
$out .= "User-Agent: ".$user_agent."\r\n";
$out .= "Cookie: ".$acook."\r\n\r\n";

fwrite($fp, $out);
$ans='';
while(!feof($fp))
{
$ans.=fgets($fp,128);
}

В итоге в $ans должен храниться хтмл код страницы. айди юзера определяется нормально,а вот страница не грабится, я так понимаю проблема в новых куках.

Оригинал статьи: http://forum.php.su/topic.php?forum=60&topic=843#