Теперь, после знакомства с API-интерфейсом LWP, будут рассмотрены некоторые практические примеры его использования.
Выборка списка документов RFC. Организация Internet FAQ Consortium (http://www.faqs.org) ведет Web-сервер с архивом, содержащим большое число важных документов Internet, в том числе документы FAQ Usenet и документы RFC и IETF. В первом примере представлено небольшое инструментальное средство с интерфейсом командной строки для выборки списка документов RFC по номерам.
Зачастую при производстве требуются формы для литья оригинального дизайна. Изготовление пресс форм в Москве можно заказать на сайте polymgroup.ru, где по исходному техническому заданию заказчику будет предложены продукты для литья пластмасс и других полимеров.
Архив RFC, находящийся по адресу www.faqs.org, имеет четкую структуру. Например, для просмотра RFC 1028 необходимо выполнить выборку информации по URL http://www.faqs.org/rfcs/rfcl02.8.html. Полученный документ HTML представляет собой вариант первоначального чисто текстового документа RFC с минимально необходимой разметкой. Организация FAQ Consortium добавляет в верхней и нижней части этого документа изображение и несколько ссылок. Кроме того, в виде ссылки оформлено каждое указание на другой документ RFC.
Сценарий get_rfc.pl приведен ниже. Он принимает один или несколько номеров документов RFC, указанных в командной строке, и выводит их содержимое на стандартное устройство вывода. Например, для выборки документов RFC 1945 и 2616, которые описывают, соответственно, версии 1.0 и 1.1 протокола HTTP, можно вызвать сценарий get_rfс.pl следующим образом:
% get_rfc.pl 1945 2616
Полученные файлы можно сохранить на диске или просмотреть в броузере.
Сценарий get_rfс.pl
0: #!/usr/local/bin/perl -w 1: # Файл: get_rfc.pl 2: use strict; 3: use LWP; 4: use constant RFCS => ’http://www.faqs.org/rfcs/1’; 5: die "Usage: get_rfc.pl rfcl rfc2...n" unless 0ARGV"; 6: my $ua = LWP::UserAgent->new; 7: my $newagent = 'get_rfc/1.0 ('.$ua->agent . ')'; 8: $ua->agent($newagent); 9: while (defined (my $rfc = shift)) { 10: warn "$rfc: invalid RFC numbern" && next unless $rfc =~ /Ad+$/; 11: my $request = HTTP::Request->new(GET => RFCS. 'rfс$rfс.html'); 12: my $response = $ua->request($request); 13: if ($response->is_success) { 14: print $response->content; 15: } else { 16: warn "RFC $rfc: ",$response->message,"n"; 17: } 18: }