Личный кабинет    
Назад К началу Вперед Карта сайта Телефонные коды стран и городов Мира Анализатор тарифов Служб IP-Телефонии и Рейтинг

Разделы
Введение
Литература
Операторы
Оборудование
Анализатор
Сотрудничество
Печать карт
Новости
Опросник
Коды
Справка
Работа
Каталог
Хостинг
Личный кабинет

Реклама

Perl для IP-Телефонии (31 – Примеры LWP, часть 42)

предыдущая часть ««»» следующая часть

Для поддержки зеркальной копии изображений, например, с сайта по продаже систем музыкальной трансляции , в актуальном состоянии этот сценарий можно выполнять неоднократно. По мере выполнения этот сценарий выводит имя файла изображения, в котором оно хранится на локальном компьютере; Например, ниже показано, какие результаты получены после того, как в вызове этого сценария был задан адрес http://cckomplect.ru.

% mirror_images.pl http://cckomplect.ru
m5v2.gif: OK
messengerpromo.gif: OK
sm.gif: OK

После выполнения этого сценария второй раз без перерыва были получены три сообщения “Not Modified”.

#!/usг/local/bin/реrl -w
# Файл: mirror_images.pl
use strict;
use LWP;
use Promptutil;
use HTTP::Cookies;
use HTML::Parser;
use URI;
use vars '@ISA';
@ISA = 'LWP::UserAgent';
my $agent =    __PACKAGE__ ->new;
$agent->cookie__jar (HTTP::Cookies->new('file=>$ENV{HOME} /lwp-cookies', autosave=>l);
while (my $url = shift) {
my $request = HTTP: :Request->new (GET => $url) ;
my $parser = HTML::Parser->new(api_version => 3); $parser->handler(start => &start,self,tagname,attr);
my $response = $agent->request($request,
sub {
my ($data,$response,$protocol) =_@ ;
die "Not an HTML fi.len"
unless $response->content_type eq 'text/html';
$parser->{base} | |= $response->base;
$parser->{agent} | |= $agent;
$parser->parse($data);
});
warn "$url: ",$response->header('X-Died'),"n"
if $respdnse->header('X-Died'); warn "$url: ", $response->message,"n"
if !$respbrise->is success;
}
sub start {
my ($parser,$tag,$attr) = @_;
return unless $tag eq 'img';
return unless my $url = $attr->{src};
my $remote_name =URI->new_abs($url,$parser->{base});
my ($local_name)  = $url =~ m! ([^/]+)$!;
my $response = $parser-> {agent} ->mirror ($remote_name, $local_name);
print STDERR ,$local_name: ", $response->message;
}
sub get_basic_credentials {
my ($self, $ realm, $uri) = _@;
print STDERR "Enter username and password for realm "$realm".n";
print STDERR "username: ";
chomp (my $name = <>) ; return unless $name; my $passwd = get_passwd ();
return ($name,$passwd);

Строки 1-15. Загрузка модулей, создание объекта агента пользователя, создание объекта запроса и объекта синтаксического анализатора.

Строки 16-24. Выдача запроса. Вызывается метод request () объекта агента пользователя, что приводит к созданию объекта ответа. Как и в последнем примере, в качестве второго параметра вызова метода request () передается ссылка на код, поэтому объект агента пользо­вателя передает входящие данные этой подпрограмме по мере их поступления.

В этом случае ссылка на код представляет собой анонимную подпрограмму. Вначале происхо­дит проверка того, имеет ли объект ответа тип MIME text/html. Если это не так, вызывается функция die с сообщением об ошибке. Это не приводит к аварийному завершению всего сце­нария в целом, но вызывает аварийное прекращение обработки текущего URL и запись сооб­щения об ошибке в специальное поле заголовка ответа x-Died:.

В ином случае входящий документ может быть подвергнут синтаксическому анализу как файл HTML. Обработчику для этого необходимо два фрагмента дополнительной информации: базо­вый URL текущего объекта ответа для преобразования относительных URL в абсолютные и объект агента пользователя, с помощью которого можно будет выдавать запросы на получе­ние встроенных изображений. Применяется тот же метод, что и в листинге ранее, и эта инфор­мация записывается в стек с использованием ссылки на хеш синтаксического анализатора.

Строки 25-27. Предупреждение об аварийных ситуациях. После завершения обработки за­проса вызывается объект ответа для проверки наличия поля заголовка x-Died: и, если оно имеется, выдается предупреждающее сообщение. Аналогичным образом выводится сообще­ние с кодом состояния ответа, если метод is_success () возвращает ложное значение.



2014-04-24 11:50:43

предыдущая часть ««»» следующая часть


ДОКУМЕНТАЦИЯ VoIP


НОВОСТИ СВЯЗИ


РЕКОМЕНДУЕМ

 
[ стандарты | обзор | оборудование | анализатор | коды | новости | карта | партнерам | Мы ВКонтаке ]
Запрещается копировать материалы сайта без уведомления авторов.
С вопросами и предложениями обращайтесь со страницы контактов
Copyright c 1999-2024 IPTop.Net
 
IP-Телефония, Интернет Телефония, Компьютерная телефония