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

Модуль для работы с Web: 13 комментариев

  1. Действительно простой модуль, которого вполне достаточно во многих ситуациях. В качестве первой плюшки можно написать метод, примерно такой: addPayload(string $name, string $value) - а при вызове request тело будет автоматически собираться из всех добавленных переменных в тело запроса, удобно будет, я считаю.

  2. Добавь отдельный параметр который автоматический урленкодится и собирается из ассоциативного массива. Альтернатива payload.

      1. Ну ведь у тебя payload не урленкодится тоже ? Надо будет самому следить за этим постоянно, а то передаваемые данные могут попортить запрос.

        1. Не урленкодится, но тогда проще ввести дополнительный флаг, указывающий на необходимость обработки тела перед отправкой.

  3. Есть же Mojo::Client, который всё это умеет и очень просто управляется, чем он не устраивает?

      1. Aвторизация для прокси там есть.

        А вот с socks, наверное, нет.

        Я не критикую, просто считаю что правильней расширять функционал готовых продуктов, тем более Mojolicious очень лёгкий и расширяемый фреймворк.

    1. Первый модуль хреново работает с http/socks5 прокси, оба модуля довольно тяжелые, да и keep-alive соединения не держат.
      В любом случае проще свое небольшое сделать, чем в них добавлять поддержку.

  4. use Web;
    my $w = Web->new(timeout => 10, agent => 'FireFox');
    $w->proxy(2, '127.0.0.1:1080'); #2 - socks5 прокси
    my $page = $w->request('GET', 'https://mini.webmoney.ru', 443, '/', '', 0);
    print $page;

    что значат эти параметры:'GET', 'https://mini.webmoney.ru', 443, '/', '', 0);
    ?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *