Анимация
JavaScript


Главная  Библионтека 

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 [ 82 ] 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103

Сейчас вы могли бы сделать все это вручную с помощью броузера, но, поскольку графические интерфейсы соверщенно не приспособлены для автоматизации программирования, это был бы медленный и утомительный процесс, требующий большего терпения и меньшей лености*, чем присущи большинству из нас.

Модули LWP (Library for WWW access in Perl - библиотека для доступа к WWW на Perl) из CPAN решают за вас все эти задачи - и даже больше. Например, обращение в сценарии к Web-документу с помощью этих модулей осуществляется настолько просто, что его можно выполнить с помощью одностроковой программы. Чтобы, к примеру, получить документ /реН/index.html с узла www.perl.сот, введите следующую строку в свой shell или интерпретатор команд:

perl -MLWP::Simple -е "getprint http: www.perl.com/perl/index.html"

За исключением модуля LWP:: Simple, большинство модулей комплекта LWP в значительной степени объектно-ориентированы. Вот, например, крошечная программа, которая получает URL как аргументы и вьщает их названия;

#!/usr/local/bin/perl use LWP;

$browser = LWP::UserAgent->new(); # создать виртуальный броузер $browser->agent("Mothra/126-Paladium:); # дать ему имя foreeach $url (@ARGV) { # ожидать URL как аргументы

# сделать GET-запрос по URL через виртуальный броузер

$webdoc = $browser->request(HTTP::Request->new(GET => $url));

if($webdoc->is success) { # нашли

print STDOUT "$url: :, $result->title, "\n";

} else { # что-то не так

print STDERR "$0: Couldnt fetch $url\n"; }

Как видите, усилия, потраченные на изучение объектов Perl, не пропали даром. Но не забывайте, что, как и модуль CGLpm, модули LWP скрывают большую часть сложной работы.

Этот сценарий работает так. Сначала создается объект - пользовательский агент (нечто вроде автоматизированного виртуального броузера). Этот объект используется для выдачи запросов на удаленные серверы. Дадим нашему виртуальному броузеру какое-нибудь глупое имя, просто чтобы сделать файлы регистрации пользователей более интересными. Затем получим удаленный документ, направив HTTP-запрос GET на удаленный сервер. Если результат успешный, выведем на экран URL и имя сервера; в противном случае немножко поплачем.

Помните, что по Ларри Уоллу три главных достоинства программиста есть Леность, Нетерпение и Гордость.



Вот программа, которая выводит рассортированный список уникальных ссылок и изображений, содержащихся в URL, переданных в виде аргументов командной строки.

#/usr/local/bin/perl -w

use strict;

use LWP 5.000;

use ORI::URL;

use HTML::LinkExtor;

my($url, $browser, %saw);

$browser = LPW::UserAgent->new(); # создать виртуальный броузер foreach $url ( @ARGV ) {

# выбрать документ через виртуальный броузер

my 5webdoc = $browser->request(HTTP: :Request->new(GET => $url)); next unless $webdoc->is success;

next unless $webdoc->content type eq text/html;

# не могу разобрать GIF-файлы

my $base = $webdoc->base;

# теперь извлечь все ссылки типа <А ...> и <IMG ...>

foreach (HTML::LinkExtor->new->parse($webdoc->content)->eof->1inks){ my($tag, %links) = @$ ;

next unless $tag eq "a" or $tag eq "img"; my 51ink;

foreach $link (values %links) (

$saw{ url($link, $base)->abs->as string }++;

print join("\n",sort keys %saw), "\n";

Ha первый взгляд все кажется очень сложным, но вызвано это, скорее всего, недостаточно четким пониманием того, как работают различные объекты и их методы. Мы не собираемся здесь давать пояснения по этим вопросам, потому что книга и так получилась уже достаточно объемной. К счастью, в LWP можно найти общирную документацию и примеры.



Дополнительная литература

Естественно, о модулях, ссылках, объектах и Web-программировании можно рассказать гораздо больше, чем вы узнали из этой маленькой главы. О CGI-программировании можно написать отдельную книгу - и таких книг уже написаны десятки. Приведенный ниже перечень поможет вам продолжить свои исследования в этой области.

• Файлы документации CGI.pm.

• Библиотека LWP из CPAN.

• CGf Programming on the World Wide Web by Shishir Gundavaram (OReilly & Associates).

• Web Client Programming with Perl by Clinton Wong (OReilly & Associates).

• HTML: The Definitive Guide by Chuck Musciano and Bill Kennedy (OReilly & Associates).

• How to Setup and Maintain a Web Site by Lincoln Stein (Addison-Wesley).

• CGI Programming in С and Perl by Thomas Boutell (Addison-Wesley).

• Сборник FAQ no CGI Ника Кью.

• Man-страницы: perltoot, perlref, perlmod, perlobj.

Упражнения

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

2. Напишите CGI-сценарий, который определяет тип броузера, делающего запрос, и сообщает что-нибудь в ответ. (Совет: воспользуйтесь переменной среды HTTP USER AGENT.)



0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 [ 82 ] 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103