Написал простой модуль для работы с 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 - считать весь ответ).
Примеры работы с модулем
Получение веб-страницы в переменную и вывод содержимого ответа на экран:
1 2 3 4 |
use Web; my $w = Web->new(timeout => 10, agent => 'FireFox'); my $page = $w->request('GET', 'http://rambler.ru', 80, '/', '', 0); print $page; |
Работа через прокси:
1 2 3 4 5 |
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; |
POST запрос через прокси:
1 2 3 4 |
use Web; my $w = new Web; my $page = $w->request('POST', 'http://site.com', 80, '/auth.php', 'login=vasya&pass=petya', 0); print $page; |
Скачать: web.pm
Действительно простой модуль, которого вполне достаточно во многих ситуациях. В качестве первой плюшки можно написать метод, примерно такой: addPayload(string $name, string $value) - а при вызове request тело будет автоматически собираться из всех добавленных переменных в тело запроса, удобно будет, я считаю.
Добавь отдельный параметр который автоматический урленкодится и собирается из ассоциативного массива. Альтернатива payload.
Может быть добавлю, а в чем практический смысл?
Ну ведь у тебя payload не урленкодится тоже ? Надо будет самому следить за этим постоянно, а то передаваемые данные могут попортить запрос.
Не урленкодится, но тогда проще ввести дополнительный флаг, указывающий на необходимость обработки тела перед отправкой.
Есть же Mojo::Client, который всё это умеет и очень просто управляется, чем он не устраивает?
Что то не наблюдаю в нем поддержку socks5 и непонятно есть ли в нем поддержка прокси с авторизацией
Aвторизация для прокси там есть.
А вот с socks, наверное, нет.
Я не критикую, просто считаю что правильней расширять функционал готовых продуктов, тем более Mojolicious очень лёгкий и расширяемый фреймворк.
айн - http://search.cpan.org/~gaas/libwww-perl-5.837/
цвай - http://search.cpan.org/dist/WWW-Curl/
нафига что-то ещё? :)
Первый модуль хреново работает с http/socks5 прокси, оба модуля довольно тяжелые, да и keep-alive соединения не держат.
В любом случае проще свое небольшое сделать, чем в них добавлять поддержку.
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);
?
т.е. 443,'/',0);
А прочитать описание методов в посте, не?