Пишем простое клиент-серверное приложение на Perl

В этой статье я рассмотрю создание простого чата на Perl. Чат будет состоять из консольного сервера и клиента с GUI на основе Tk. Для начала реализуем серверную часть.
В серверной части мы не будем использовать процессы или потоки, а вместо этого воспользуемся мультиплексированием. Мультиплексирование довольно просто реализуется с помощью модуля IO::Select, который является классом-оболочкой над системной функцией select.
Функция select позволяет определить готовность дескриптора к записи/чтению. Также стоит отметить, что при использовании select следует избегать использования блокирующих вызовов, как, например, print, read, вместо них необходимо использовать syswrite, sysread.
Читать далее «Пишем простое клиент-серверное приложение на Perl»

Модуль для работы с Web

Написал простой модуль для работы с web. Модуль довольно легкий, основан на IO::Socket::INET и IO::Socket::SSL.

Конструктор:
new()
new(arg => value, arg => value)

  Создает объект, который используется для дальнейших запросов. Доступные аргументы: agent (user-agent, который будет использоваться в запросе), timeout (таймаут соединения).

Методы:
set_cookie($arg)
  Устанавливает аргумент в качестве кукисов.

header(%arg)
  Устанавливает дополнительные заголовки.

proxy_auth($login, $passw)
  Устанавливает логин и пароль для авторизации при работе с http-прокси.

socks_auth($login, $passw)
  Устанавливает логин и пароль для авторизации при работе с socks-прокси.

proxy($proxy_type, $proxy)
  Включает работу через прокси.
  $proxy_type может принимать следующие значения: 0 - без прокси, 1 - http-прокси, 2 - socks5 прокси.
  $proxy в формате ip:port

request($method, $host, $port, $uri, $payload, $limit)
  Метод для непосредственного выполнения запроса
  $method - GET, POST, HEAD,
  $host - адрес сайта с http:// (например, http://rambler.ru),
  $port - порт,
  $uri - путь запроса (например, /index.php),
  $payload - тело POST-запроса,
  $limit - количество байт, которые необходимо считать из сокета (0 - считать весь ответ).

Примеры работы с модулем
Получение веб-страницы в переменную и вывод содержимого ответа на экран:

Работа через прокси:

POST запрос через прокси:

Скачать: web.pm

Класс для работы с сокетами

PHP-класс, позволяющий просто работать с сокетами без лишних усилий.
Способен получить страницу по HTTP/1.1 и с использованием Keep-Alive-соединения, а также нормально парсит страницы с Transfer-Encoding: chunked.
Кроме того, если страница выдаётся в gzip, то есть возможность автоматической распаковки содержимого.
Класс также поддерживает прокси и может парсить cookies, выдаваемые ему сайтом.

По умолчанию класс работает через функции socket_*** (не поддерживаются денвером), но можно использовать и привычные fsockopen, правда, тогда через Keep-alive работать не получится.

Пример:

Ещё пример:

Дополнительные комментарии по всем функциям класса можно найти в его коде.

UPD от 30.03.09: Выкладываю новую версию, в которой добавлена поддержка прокси с паролями, socks5, socks5 с паролями и исправлен парсинг cookies, а также добавлены простые функции get и post.

UPD от 02.04.09: еще некоторые мелкие поправки

UPD от 16.04.09: исправлен косяк при работе с прокси

Скачать класс в zip