Мне нужно создать скрипт для входа на сайт. Сказав это, я собираюсь захватить токен CSRF со страницы входа и отправьте его в URL-адрес действия входа. [Принято данных в формате JSON.]Получить токен CSRF со страницы & POST его
Это метод Логин:
public function login()
{
$login = 'https://XXXXXXXXXXXXXXXXXXX';
$csrf = $this->token();
$data = array(
"email" => '[email protected]',
"password" => '123456',
"displayType" => 'json',
"csrf" => $csrf
);
$json = json_encode($data);
$ch = curl_init($login);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HEADER, true); // For debugging purposes
curl_setopt($ch, CURLOPT_HTTPHEADER, $this->headers);
curl_setopt($ch, CURLOPT_POSTFIELDS, $json);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$result = curl_exec($ch);
return $result;
}
А вот лексема метод граббер:
public function token()
{
$source = $this->get("https://OOOOOOOOOOOOOOOOOOO");
$dom = new DOMDocument();
$dom->loadHTML($source);
$dxp = new DOMXpath($dom);
$csrf = $dxp->query('//input[@name="csrf"]/@value')->item(0)->value;
return $csrf;
}
Токен успешно извлечен, но изменяется при каждом вызове в пределах той же сессии. Почему?! Я инициализирует сеанс таким образом:.
public function __construct($url)
{
if(session_status() == PHP_SESSION_NONE)
session_start();
...
}
Я не вижу, что вы проходя любой идентификатор сессии на удаленный сайт ... или что должно содержаться в URL в ' $ login' или заголовки, которые вы передаете? – CBroe