Автоматическая авторизация при парсинге в 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'), затем зайдет на главную страницу, спарсит оттуда все ссылки, а затем спарсит содержимое статей по этим ссылкам.



Чат с GPT Компилятор