Автоматическая авторизация при парсинге в PHP
Пусть нам нужно парсить контент, доступный только авторизованному пользователю. Для этого наш парсер должен сначала авторизоваться в форме авторизации. Затем парсер должен ходить по сайту, уже будучи авторизованным.
Это работает по следующему принципу. Когда юзер авторизуется на сайте, на стороне сервера запускается сессия, в которой стоит пометка об авторизации. Данные сессии хранятся на серверной стороне сайта, а браузер связан с ними через куки. Когда пользователь, авторизовавшись, начинает ходить по страницам сайта, браузер при каждом новом запросе отправляет куки на сервер и сервер видит сессию, запущенную для данного браузера и определяет, авторизован ли юзер или нет.
Технически для нашего парсера это означает, что первый запрос мы должны сделать в форме авторизации в качестве ответа поймав и сохранив сессионную куку в файл. После этого мы должны ходить по сайту, каждый раз отсылая куку.
Давайте попробуем на практике. Добавим в CURL настройки, позволяющие автоматически ловить и отправлять куки:
<?php
$cookieFilePath = $_SERVER['DOCUMENT_ROOT'] . 'cookie.txt';
curl_setopt($curl, CURLOPT_COOKIEFILE, $cookieFilePath);
curl_setopt($curl, CURLOPT_COOKIEJAR, $cookieFilePath);
?>
Пусть теперь у нас есть тестовая форма авторизации:
<form action="" method="POST">
<input name="login">
<input name="pass">
<input type="submit">
</form>
<?php
session_start();
$login = 'user';
$pass = '12345';
if (!empty($_POST)) {
if ($_POST['login'] === $login and $_POST['pass'] === $pass) {
$_SESSION['auth'] = true;
}
}
?>
И пусть на остальных страницах сайта располагается контент, доступный только авторизованному пользователю:
<?php
session_start();
if ($_SESSION['auth']) {
echo 'закрытый контент';
}
?>
Скопируйте себе код страницы авторизации и код обычной страницы. Проверьте через браузер, как работает авторизация. Затем напишите парсер, который спарсит контент с закрытых страниц.
Скачайте сайт по ссылке targ.zip и разверните его у себя. Напишите парсер, который выполнит авторизацию (файл auth.php, логин 'user', пароль '12345'), затем зайдет на главную страницу, спарсит оттуда все ссылки, а затем спарсит содержимое статей по этим ссылкам.