Пример простого web-клиента на основе perl и POE. Модуль POE::Component::Client::HTTP

Пример web-клиента

Алгоритм: для каждого url из списка создается своя сессия. Как только все сессии завершат свою работу, скрипт завершается. При этом, все сессии используют одну и ту же сессию POE::Component::Client::HTTP user-agent.

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

 

Описание POE::Component::Client::HTTP

POE::Component::Client::HTTP — это HTTP user-agent для POE. Позволяет другим сессиям POE выполняться, пока идет обработка HTTP-транзакций. Данный подход позволяет выполняться сразу нескольким HTTP-запросам.

Компоненты POE::Component::Client::HTTP не являются соответствующими объектами. POE::Component::Client::HTTP порождает не объекты, а сессии. Именно поэтому вместо new используется spawn.

Вновь созданная сессия способна обработать несколько событий: request, pending_requests_count, cancel, shutdown

Для обращения к сессии POE::Component::Client::HTTP, POE использует метод post.

Пример:

Указывается название сессии, имя вызываемого события (одно из встроенных в POE::Component::Client::HTTP), имя события, которое будет вызвано после выполнения запроса (задается разработчиком), и ссылка на объект HTTP::Request. Возможно добавление к указанному списку других параметров.

request

При вызове данного события, выполняется запрос к заданному web-ресурсу.

pending_requests_count

Возвращает количество обрабатываемых в текущий момент запросов.

cancel

Отменяет http-запрос. При этом следует дать ссылку на оригинал запроса, т.к. компонента обрабатывает множество запросов и не знает — какой конкретно отменить.

shutdown

Все ожидающие обработки запросы отрубает по таймауту, завершает работу сессии и всех ее дочерних порождений.

Как писать обработчик ответа на запрос

В дополнение ко всем доступным параметрам POE, HTTP-ответ возвращается с двумя списками ссылок.

$request_packet — содержит ссылку на оригинальный объект HTTP::Request.

$response_packet — содержит ссылку на объект HTTP::Response, с результатами выполнения запроса.

Полезные ссылки

search.cpan.org: POE::Component::Client::HTTP

poe.perl.org: Web Client