Вопрос по php, session – file_get_contents из url, который доступен только после входа на сайт

9

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

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

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

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

How do I send a request that contains my log-in details so that the website replies with the session information/cookie How do i read the session information/cookie How do i pass back this session information with every consequent request (file_get_contents, curl) to the website.

Благодарю.

Ваш Ответ

2   ответа
0

http pecl extension может сделать это, такжеPEAR :: HTTP_Client, Snoopy и многие другие библиотеки / классы. Если вы (по какой-либо причине) вы хотите добиться этого сfile_get_contents, вы можете использовать параметры контекста потока для http-оболочки для установки параметров POST и cookie и Stream_get_meta_data чтобы прочитать заголовки ответа, включая файлы cookie.

15

нного, кроме как установитьCURLOPT_COOKIEJAR а такжеCURLOPT_COOKIEFILE опции. После того, как вы вошли в систему, передав поля формы с сайта, файл cookie будет сохранен, и Curl будет автоматически использовать этот же файл 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;
}
и у меня не сработало Ehsan
Это доставляет удовольствие то, что я хотел - спасибо Chris
Хотелось бы, чтобы это работало на меня, но это не так = Brade
у меня тоже не сработало Hazem Hagrass
Это все еще отлично работает для меня. Если это не работает для вас, убедитесь, что а) вы предоставили все необходимые поля формы и б) ваш файл cookies.txt доступен для записи. cOle2

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