Как создать простой http-сервер с помощью HTTP::Daemon

Приведенных ниже примеров вполне достаточно, чтобы получить представление о принципах работы
с модулем HTTP::Daemon, и об организации работы простого сервера.

Основной особенностью работы с HTTP::Daemon является то, что функциональность сервера обеспечивается не самим HTTP::Daemon, а массой дополнительных модулей: URI, HTTP::Request, HTTP::Message, HTTP::Headers, HTTP::Response. И для создания даже простого сервера, требуется понимать каждый из них.

Самый простой пример сервера

Сервер запускается, выводит строку адреса, по которому он готов принимать запросы.

Если обратиться по указанному адресу (браузером, скриптом), сервер примет запрос и вернет ответ. В данном примере при создании объекта, был задан таймаут. Если по истечении указанного количества секунд к серверу никто не обратится, он завершит свою работу.

Обработка данных из URL-строки

Имеется некая структура данных. Требуется, чтобы сервер возвращал данные из этой структуры,
в зависимости от пришедшего запроса.

Клиент может обратиться к данному серверу, используя адреса типа:

  • http://dev-lab.info:56449/ - вывод списка всех групп департамента
  • http://dev-lab.info:56449/web_group/ - вывод списка сотрудников заданной группы
  • http://dev-lab.info:56449/web_group?name=Maria - вывод всей информации о сотруднике
  • http://dev-lab.info:56449/web_group?name=Maria&data=off_phone - вывод запрошенной информации о сотруднике, например, номера внутреннего телефона или номера кабинета

Если запрашиваемые данные в хранилище отсутствуют - клиент получит статус ответа 404.

Прием данных от клиента

Прием данных

Прием данных из формы

Если серверу была передана форма, и был указан тип данных 'application/x-www-form-urlencoded', сервер может получить эти данные следующим образом:

Метод query_form() вернет данные в виде хеша, где каждый ключ - это name поля формы, а значение - содержимое этого поля.

Передача данных клиенту

Вывод клиенту сообщений об ошибках

Можно выводить клиенту сообщения об ошибках с помощью метода send_error(). Ответ будет выслан в html-формате.

Передача клиенту файлов

Можно в ответ на запрос, предлагать клиенту скачать файл.

Ответ клиенту с помощью HTTP::Response

Можно сформировать и отправить ответ клиенту с помощью HTTP::Response.

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

Документация на search.cpan.org

search.cpan.org: HTTP::Daemon

search.cpan.org: HTTP::Response
search.cpan.org: HTTP::Request
search.cpan.org: URI

Примеры использования HTTP::Daemon

perlmonks.org: GUI with HTTP::Daemon
gist.github.com: Stand-alone directory browser on HTTP::Daemon
snippets.dzone.com: Pre-forking HTTP daemon in Perl