Библиотека для работы с Web на PHP

logo

Давным-давно, когда в моде еще был PHP4, я написал несложную библиотеку на PHP для работы с Web. Эта библиотека была достаточно примитивной, состояла из одного-единственного класса, содержала какие-то ошибки, но, тем не менее, она работала и была вполне юзабельной, поддерживала различные типы прокси-серверов, chunked-содержимое, сжатое содержимое и еще всякие приятные мелочи.

Однако, пришло время расширить функционал библиотеки, а заодно и полностью переписать ее с использованием новых возможностей ООП PHP5.

Итак, вот основные фишки новой библиотеки в сравнении со старой (жирным отмечены самые интересные особенности):

Характеристика Websock2 Websock
PHP4 - +
Не требует cURL + +
HTTP + +
HTTPS + -
GET-и POST-запросы + +
Удобная работа с HTTP-заголовками + -
File uploads + -
Автоматическое отслеживание cookies + -
Автоматическая обработка HTTP-редиректов + -
Установка referer при редиректах + -
Basic-аутентификация + -
Digest-аутентификация + -
Автоматическая basic/digest аутентификация + -
Chunked encoding + +
GZIPped-содержимое + +
Deflated-содержимое + -
HTTP-прокси + +
HTTP-прокси в режиме HTTPS + -
SOCKS4-прокси + -
SOCKS4a-прокси + -
SOCKS5-прокси + +
Аутентификация прокси + +
Цепочки прокси + -
Отслеживание таймаутов операций + -
Сокеты через file и socket_*-функции + +
Перехват HTTP-редиректов + -
Перехват чтения HTTP-заголовков и содержимого + -
Скачивание/загрузка очень больших файлов + -
Сделано по RFC + -
Удобная архитектура, простая расширяемость + -

Как видно из таблицы, новая библиотека содержит намного больше функций, чем старая. Более того, новая библиотека хорошо задокументирована (на английском) и содержит большое количество примеров.

Скачать архив (библиотека + примеры + документация): Websock2
Просмотреть документацию и примеры использования

Пожелания и вопросы можно оставлять в комментариях к посту или на нашем форуме.

На GitHub

Socks5 Server

Решил сделать небольшую поделку на основе двух существующих socks-серверов на perl'e. За основу были взяты sss и rdss.
Отличия:
[~] Вместо форка использованы треды
[~] Предварительно формируется пул потоков для обработки запросов
[~] Модуль MD5 выкинут, соответственно, пароль вводится в открытом виде
[~] Использует модуль IO::Select (эдакое мультиплексирование)
[~] Более читабельный код

В общем, надеюсь, кому-нибудь пригодится.
Скачать: serv.pl
GitHub: socks5-proxy-server

Модуль для работы с 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