file_get_contents из url, доступ к которому возможен только после входа на сайт

Я хотел бы сделать php-скрипт, который может захватывать страницу с веб-сайта. Думайте file_get_contents ($ url) .

Однако на этом веб-сайте требуется, чтобы вы заполнили форму входа в систему имени пользователя и пароля, прежде чем вы сможете получить доступ к любой странице. Я предполагаю, что после входа в систему веб-сайт отправляет вашему браузеру файл cookie для проверки подлинности и с каждым последующим запросом браузера информация о сеансе передается обратно на веб-сайт для аутентификации доступа.

Я хочу знать, как смогу имитировать это поведение браузера с помощью php-скрипта, чтобы получить доступ и захватить страницу с этого сайта.

Более конкретно, мои вопросы:

  1. Как отправить запрос, содержащий мои данные входа в систему, чтобы сайт отвечал на информацию о сеансе / файл cookie
  2. Как читать информацию о сеансе / файл cookie
  3. Как передать эту информацию сессии с каждым последующим запросом ( file_get_contents , curl ) на веб-сайт.

Благодарю.

Solutions Collecting From Web of "file_get_contents из url, доступ к которому возможен только после входа на сайт"

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.