Добрый день! Нужно авторизоваться на сайте и после этого спарсить одну страницу.
Сложность в том, что при авторизации форма передает токен, который всегда разный.
Поэтому нужно сначала узнать токен, а потом при авторизации через POST передать не только логин и пароль, но и токен.
Как это сделать в один присест? И токен получить и авторизвоаться сразу? Ведь при втором запросе токен то уже меняется.
Вот здесь у товарища, видимо, идентичная проблема (
Авторизация на сайте с использование curl (PHP)? ). И он ее решил, но решение не описал. В качестве кода (
нереботающего) приводит это:
public function authUser($url=null,$token = '1'){
$parser = EvilApplication::getInstance()->getConfig('parser');
$EvilCurl = curl_init();
curl_setopt($EvilCurl,CURLOPT_URL,(isset($url)) ? $url : $parser['url']);
curl_setopt($EvilCurl, CURLOPT_USERAGENT, "Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36");
curl_setopt($EvilCurl, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($EvilCurl, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($EvilCurl, CURLOPT_POST, 1);
curl_setopt($EvilCurl, CURLOPT_POSTFIELDS, 'action=login&autologin=1&login='.$parser['user_login'].'&passwd='.$parser['user_password'].'&u_token_key='.$token);
curl_setopt($EvilCurl, CURLOPT_HEADER, 0);
curl_setopt($EvilCurl, CURLOPT_REFERER, (isset($url)) ? $url : $parser['url']);
curl_setopt($EvilCurl, CURLOPT_COOKIESESSION, true);
curl_setopt($EvilCurl, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($EvilCurl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($EvilCurl, CURLOPT_COOKIEJAR, dirname(__FILE__).'/cookie.txt');
curl_setopt($EvilCurl, CURLOPT_COOKIEFILE, dirname(__FILE__).'/cookie.txt');
$response = curl_exec($EvilCurl);
#закрываем соединение
if($token=='1'){
$pos = strpos($response,'var _TOKEN_KEY =');
$data = substr($response, $pos,strlen($response));
$pos = strpos($data,"';");
$data = substr($data, 0,$pos);
$this->authUser($url,str_replace("var _TOKEN_KEY = '",'',$data));
}else{
die($response);
}
curl_close($EvilCurl);
#return $response;
}
И затем свое же сообщение комментирует:
в результате скопировав cookie которые были выданы после авторизации, парсить сайт получилось.
Вопрос: как сделать то, что он написал?
Мне как и ему нужно спарсить одну страницу после авторизации с осложнением: каждый раз уникальные токены.
Большое спасибо за помощ!