@molodtsov

Как авторизоваться на стороннем сайте через PHP?

Добрый день! Нужно авторизоваться на сайте и после этого спарсить одну страницу.

Сложность в том, что при авторизации форма передает токен, который всегда разный.
Поэтому нужно сначала узнать токен, а потом при авторизации через 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 которые были выданы после авторизации, парсить сайт получилось.


Вопрос: как сделать то, что он написал?
Мне как и ему нужно спарсить одну страницу после авторизации с осложнением: каждый раз уникальные токены.

Большое спасибо за помощ!
  • Вопрос задан
  • 1538 просмотров
Пригласить эксперта
Ответы на вопрос 1
webinar
@webinar Куратор тега PHP
Учим yii: https://youtu.be/-WRMlGHLgRg
Может не парить себе мозг и скачать ПО для парсинга? Например sbfactory.ru/?p=600
Там и авторизация и парсинг в csv или прямо в базу и т.д.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы