CurlPro - PHP библиотека для парсинга сайтов.

PHP код библиотеки. (версия 1.a01xFGC)

Описание доступных методов

Метод showhead(без параметров)

Получает заголовки переданные парсеру от сервера.

Метод setservercharset("UTF-8")

Устанавливает кодировку в которой работает Web-сервер Apache, принимает в качестве параметра строку, например "UTF-8"

История изменений

Версия 1.a01xFGC от 24.02.2024

Добавлена возможность соединения с сервером с использованием функции file_get_contents, при этом эмулируются заголовки аналогичные браузеру Firefox версии 122.0.1 для версии HTTP протокола 1.1 как для метода GET так и для POST(передача методом multipart не поддерживается как и для curl). Указанные заголовки передаются только при использовании соединения с использованием file_get_contents, для curl применяется старая логика установки заголовков как и старые значения заголовков.

Для управления технологией используемой для соединения с web-сервером добавлено свойство $notCurlConnect которое по-умолчанию принимает значение false, Таким образом по-умолчанию соединение осуществляется с использованием curl.

Так же добавлены 3 свойства в которых храняться значения заголовков запроса при соединении с использованием file_get_contents(возможно в будущем будут использованы и для curl), а именно: $clientHeaderAccept, $clientHeaderAcceptLanguage и $clientHeaderAcceptEncoding.

В начале метода go добавлено определение переменной $content для возможного избежания warning(например при использовании кэша), а так же чтобы переменная была таким образом определена не ниже уровня использования.

В начало метода go добавлена переменная $querytimeout равная 10, то есть значение таймаута соединения, она применяется как при соединении с использованием curl, так и file_get_contents.

Изменена логика заполнения массива для cookie при использовании соединения с использованием curl, а именно добавлено кодирование знака "точка с запятой" и знака "равенство" как для названия cookie так и для значения. Заполнение массива с cookie для метода соединенеияя с использованием file_get_contents осуществляется аналогичным образом.

Добавлена декомпрессия gzip и brotli при наличии соответствующих заголовков в ответе сервера для тела ответа и при доступности необходимых функций декомпрессии на сервере. Для избежания повторной попытки декомпрессии(например если file_get_contents или curl выполнят её самостоятельно) добавлена предварительная проверка - не вернул ли метод декомпрессии значение false, только при выполнении условия свойству $body будет присвоен контент полученный после декомпрессии.

Список изменений по коду описан в видео по ссылке: https://www.youtube.com/watch?v=NYJ5I7XAI3E

Версия 1.a01x от 29.10.2021

Добавлен метод arrayConvertPostRequestFormat(array $array); который принимает одно значение - это произвольный массив который требуется преобразовать к формату для передачи данных из этого массива POST-запросом.

Версия 1.a01 от 21.07.2021

Добавлен метод postjson(string $jsonString,string $charsetString). Метод устанавливающий необходимость отправить POST запрос содержанием которого является строка в формате JSON.Метод автоматически устанавливает заголовок Content-Type который будет передан при запросе и который указывает что данные передаются как application/json. Кроме того метод позволяет указать кодировку передав её в виде строки вторым параметром. Если этого не сделать будет установлена кодировка по-умолчанию: utf-8. Для работы метода были созданы 2 переменные: $requestContentType и $requestContentTypeCharset установка которых осуществляется при вызове метода postjson, иначе обе переменные имеют значение false. Сам текст запроса помещается в переменную $postactivedata. Если установить переменные $requestContentType и $requestContentTypeCharset в обход метода postjson, то отправка заголовка Content-Type произойдёт только если установлена переменная $postactivedata, если же POST данные установлены через метод postdata в версии библиотеки curlpro 1.a01 передача заголовка Content-Type для этого случая не предусмотрена.

Версия 1.03 от 17.04.2019

Добавлен метод addtoheader(string $header). Метод добавлят произвольный заголовок с параметром необходимый для выполнения запроса. Пример использования $cp->addtoheader("Content-Type: application/json;charset=utf-8"); Для работы метода в классе curlPro была создана приватная переменная public $addtoheader = array(); в этот массив элементами добавляются необходимые заголовки и их значения в виде единой строки. В текущей версии добавленные заголовки не обнуляются после выполнения запроса. Для обнуления необходимо вручную выполнить $cp->addtoheader = array(); или удалить отдельные элементы этого массива.

Версия 1.01 от 7.02.2019

Метод определения массива изображений getimagesarray(без параметров) теперь использует textparser в своей работе а не DOM объект как это было ранее(new domDocument()).

Замечания и баги

Не корректно применяется заголовок referer при соединении с использованием curl.

При использовании соединения с использованием curl и передаче cookie, заголовок cookie передаётся первым.

При соединении с использованием curl используются заголовки для Firefox 61-ой версии.

При соединении с использованием file_get_contents на PHP 8.1 возможно зависание запроса из за заголовка Connection: keep-alive, частично ситуацию решает timeout.

Возможно имеет смысл произвести аналитику кодирования заголовков cookie и соответственно внести необходимые изменения.

Рассмотреть возможность единой подготовки данных запросов(cookie, post, headers) как для соединения с использованием curl, так и file_get_contents, в версии 1.a01xFGC было решено этого не делать.

Евгений Николаев (программист).