Это относится к предыдущему вопросу StackOverflow, учетные данные для входа, где Том Б. предложил использовать этот формат для входа через HTTP / HTTPS: username:[email protected]
,
Этот подход оставляет имя пользователя и пароль видимыми для любого, кто проверяет источник страницы.
Есть ли способ выполнить первоначальный вход в систему через PHP (возможно, CURL), а затем продолжить сеанс HTML? Я попробовал следующее, но по какой-то причине сеанс не сохраняется, что приводит к сбою исходящего HTML:
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://url.xxx');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERPWD, "user:password");
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
$output = curl_exec($ch);
curl_close($ch);
include 'sessionPage.html';
?>
Этот формат тоже не работал:
curl_setopt($ch, CURLOPT_URL, 'http://user:[email protected]');
Как я могу выполнить успешный вход в систему через скрипт PHP и перенести сеанс на исходную HTML-страницу? Ресурс сторонний, поэтому я не контролирую информацию о сеансе.
Спасибо.
Вы можете использовать cookie-файл для хранения session_id успешного (ручного) входа в систему. Таким образом, сценарий curl будет казаться тем пользователем, который первым создал идентификатор сеанса.
сценарий скручивания
function get_data( $url ) {
$cookie = 'cookie.txt';
$ch = curl_init();
$timeout = 5;
curl_setopt( $ch, CURLOPT_URL, $url );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT, $timeout );
curl_setopt( $ch, CURLOPT_COOKIEJAR, $cookie );
curl_setopt( $ch, CURLOPT_COOKIEFILE, $cookie );
$data = curl_exec( $ch );
curl_close( $ch );
return $data;
}
файл cookie (содержит только эту строку)
www.awebsite.com TRUE / FALSE 0 PHPSESSID 5rsiasdfasdfasdfasdf73dvi9r0
чтобы получить идентификатор сеанса, войдите вручную на рассматриваемый сайт, просмотрите куки с помощью инструментов разработчика браузеров и скопируйте PHPSESSID
, Очевидно, что при таком подходе вы ограничены необходимостью сначала получить session_id самостоятельно.
Возможно только если php работает на той же машине. По сути, вам нужно извлечь cookie из ответа cURL и, используя PHP, записать этот cookie в файловую систему в нужном месте, чтобы эмулировать успешный вход в систему. Все это при условии, что куки используются для аутентификации. Существуют и другие формы аутентификации: постоянные формы, sessionid в URL, по IP-адресу и т. Д.