О себе События Портфолио Статьи Гостевая Фотоальбом На злобу дня Ссылки Учеба Программы
Alex_K (г.Киров) - Алексей Кощеев
Хостинг и регистрация доменов в Кирове

Интересные решения Perl. Вопросы и ответы

Осуществление HTTP-запросов в Perl

Для того, чтобы сделать HTTP-запрос в Perl можно использовать несколько способов.

Первый и наименее удобный способ - ручное открытие сокета, формирование заголовков запроса и получение ответа. Здесь возникает много неприятностей в завимости от типа, количества и других особенностей запросов.

Вторым и на мой взгляд наиболее правильным способом является использование библиотеки LWP (The World-Wide Web library for Perl).

Библиотека позволяет совершать не только HTTP-запросы, но и запросы по протоколам HTTPS, FTP и др.

LWP дает два основных варианта совершения запросов: простой и расширенный.

Для создания простых запросов используется модуль LWP::Simple, который позволяет совершать GET и HEAD-запросы для указанных URL. Управлять отправляемыми и принимаемыми заголовками почти не получится.

Приведенный ниже код предназначен для скачивания графических информеров и складывания их в определенные папки.

#!/usr/bin/perl use strict; my @url = (); my @savePath = (); $url[0] = 'http://pics.rbc.ru/img/grinf/usd/eur_cb_forex_000066_88x90.gif'; $savePath[0] = '/home/user/WWW/i/eur_cb_forex_000066_88x90.gif'; $url[1] = 'http://informer.gismeteo.ru/27196-6.GIF'; $savePath[1] = '/home/user/WWW/i/27196-6.GIF'; use LWP::Simple; my $i = 0; foreach (@url) { print "$_: " . getstore($_, $savePath[$i++]) . "\n"; }

Для создания расширенных запросов, где каждый заголовок, каждый байт запроса находится в руках программиста используется вся библиотека LWP. Приведенный ниже код делает почти тоже самое.

#!/usr/bin/perl use strict; use warnings; my @url = (); my @savePath = (); $url[0] = 'http://pics.rbc.ru/img/grinf/usd/eur_cb_forex_000066_88x90.gif'; $savePath[0] = '/home/user/WWW/i/eur_cb_forex_000066_88x90.gif'; $url[1] = 'http://informer.gismeteo.ru/27196-6.GIF'; $savePath[1] = '/home/user/WWW/i/27196-6.GIF'; use LWP 5.64; my $browser = LWP::UserAgent->new( env_proxy => 0, keep_alive => 1, timeout => 300, ); # если нужно использовать прокси # $browser->proxy('http', 'http://192.168.1.3:8080/'); my @headers = ( 'User-Agent' => 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705)', 'Accept' => 'image/png, image/jpeg, image/gif, text/html, text/plain, */*', 'Accept-Charset' => 'windows-1251', 'Accept-Language' => 'ru', ); my $i = 0; foreach (@url) { my $response = $browser->get($_, @headers); print $response->code . ': ' . $_ . "\n"; if ( $response->is_success ) { if (open(FILE2, '>' . $savePath[$i])) { binmode(FILE2); flock(FILE2, 2); print FILE2 $response->content; flock(FILE2, 8); close(FILE2); } } $i++; }
Смотрите также: HTTPS запросы в Perl

Опубликовано: 25 августа 2007 года.

Далее: Отправка сообщений через Jabber-сервер
Предыдущий вопрос:Как узнать, является ли строка адресом электронной почты
Перейти к списку вопросов
Fanshop.ru

Рейтинг@Mail.ru

Rambler's Top100

© Алексей Кощеев, г.Киров, 2001-2017 хостинг предоставлен компанией Айхэд