Я хотел бы сделать php-скрипт, который может захватывать страницу с веб-сайта. Думайте file_get_contents ($ url) .
Однако на этом веб-сайте требуется, чтобы вы заполнили форму входа в систему имени пользователя и пароля, прежде чем вы сможете получить доступ к любой странице. Я предполагаю, что после входа в систему веб-сайт отправляет вашему браузеру файл cookie для проверки подлинности и с каждым последующим запросом браузера информация о сеансе передается обратно на веб-сайт для аутентификации доступа.
Я хочу знать, как смогу имитировать это поведение браузера с помощью php-скрипта, чтобы получить доступ и захватить страницу с этого сайта.
Более конкретно, мои вопросы:
Благодарю.
Curl очень хорошо подходит для этого. Вам не нужно ничего особенного, кроме параметров CURLOPT_COOKIEJAR
и CURLOPT_COOKIEFILE
. После того, как вы вошли в систему, передав поля формы с сайта, cookie будет сохранен, и Curl будет использовать тот же файл cookie для последующих запросов автоматически, как показано в примере ниже.
Обратите внимание, что приведенная ниже функция сохраняет файлы cookie в cookies/cookie.txt
поэтому убедитесь, что каталог / файл существует и может быть записано.
$loginUrl = 'http://example.com/login'; //action from the login form $loginFields = array('username'=>'user', 'password'=>'pass'); //login form field names and values $remotePageUrl = 'http://example.com/remotepage.html'; //url of the page you want to save $login = getUrl($loginUrl, 'post', $loginFields); //login to the site $remotePage = getUrl($remotePageUrl); //get the remote page function getUrl($url, $method='', $vars='') { $ch = curl_init(); if ($method == 'post') { curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $vars); } curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookies/cookies.txt'); curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookies/cookies.txt'); $buffer = curl_exec($ch); curl_close($ch); return $buffer; }
Расширение http pecl может это сделать, также PEAR :: HTTP_Client , Snoopy и многие другие библиотеки / классы. Если вы (по какой-либо причине) хотите достичь этого с помощью file_get_contents
, вы можете использовать параметры контекста потока для http-оболочки для установки параметров POST и cookie и stream_get_meta_data для чтения заголовков ответов, включая файлы cookie.