Чтение онлайн

на главную - закладки

Жанры

Язык программирования Perl

Шохирев Михаил Васильевич

Шрифт:

Сервер обрабатывает поступающие от клиентов запросы на расположенные на сервере ресурсы. Если затребован существующий файл, то он отправляется сервером клиенту. Если запрошено обращение к CGI-программе, то сервер запускает ее и отправляет клиенту результат ее выполнения. Ответ HTTP-сервера также состоит из трех частей, которые приведены в таблице 18.2.

Таблица 18.2. Структура HTTP-ответа

Составные части Описание Примеры
Строка ответа содержит цифровой код ответа и текстовое описание состояния запроса HTTP/1.0 200 Document follows
HTTP/1.1 404 Not Found
HTTP/1.0 500 Internal Server Error
Заголовки
ответа
содержат дополнительную информацию, например, данные о типе и длине посылаемого ресурса Content-type: text/html
Content-length: 1025
Тело ответа содержит передаваемые данные <html>...</html>

Важной особенностью протокола HTTP является то, что он ориентирован на обработку независимых запросов, то есть в нем не предусмотрено сохранение состояния взаимодействия с клиентом. Поэтому организация сеансовой работы с web-сервером ложится на программиста.

Автоматизировать рутинные действия при обмене данными с помощью HTTP и преодолеть трудности программного взаимодействия с HTTP-серверами помогают многочисленные готовые Perl-модули. Стандартная библиотека LWP (Library for WWW in Perl) содержит разнообразные и мощные средства для работы с ресурсами WWW. С ее помощью можно легко запрограммировать простые и решить весьма нетривиальные задачи. Например, запрос документа с web-сервера записывается всего одной строкой:

use LWP::Simple; # использовать упрощенный интерфейс к LWP

my $page = get 'http://www.perl.com/';

Не сложнее обратиться с запросом к поисковым системам. Для этого нужно в URL указать аргументы поиска. Формат строки запроса к конкретной поисковой машине можно посмотреть в строке браузера. Например, по такому URL можно искать книги по Perl в поисковой системе Google:

$url = 'http://www.google.ru/search?q=Perl+book';

А чтобы найти на сайте CPAN все модули, ориентированные на работу с HTML, нужно отправить такой запрос:

$url= 'http://search.cpan.org/search?query=HTML&mode=module';

Это примеры запросов, отправляемых методом GET, когда аргументы передаются непосредственно в строке, адресующей ресурс. При другом способе запрос отправляется методом POST, а данные запроса отправляются в теле запроса. Если требуется отправить из программы данные HTML-формы на HTTP-сервер методом POST, то это столь же просто делается с помощью LWP:

use LWP::UserAgent; # используем класс 'Клиент' из LWP

use HTTP::Request::Common qw(POST); # и метод POST

my $user_agent = LWP::UserAgent->new; # создаем клиента

# заполняем поля формы для отправки на нужный сайт

my $form = POST 'http://site.ru/cgi-bin/guestbook.pl',

[ nick => 'user', email => 'user@mail.ru',

comments => 'Спасибо
за помощь!' ];

# передаем клиенту форму для отправки на сервер

my $response = $user_agent->request($form); # получаем ответ

print $response->as_string; # и выводим его в виде строки

Можно долго говорить о возможностях библиотеки LWP. С ее помощью можно: работать с новостными группами (news), обмениваться файлами по протоколу FTP, отправлять запросы к информационным системам Gopher, читать локальные файлы, отправлять электронную почту и создавать пользовательских агентов для автоматического исследования сайтов (web-роботов или "пауков"). Можно даже быстро набросать простой, но вполне работоспособный web-сервер. Для этого нужно воспользоваться классом HTTP::Daemon:

use HTTP::Daemon; # используем классы HTTP-сервера

my $server_root = '/tmp'; # каталог для файлов сервера

# создаем экземпляр WWW-сервера, слушающего порт 8080

my $httpd = new HTTP::Daemon(LocalPort => 8080); #

while (my $connection = $httpd->accept) { # ждем соединения

# получаем запросы на соединении

while (my $request = $connection->get_request) {

if ($request->method eq 'GET') { # выполняем GET

$connection->send_file_response( # отправляем файл

$server_root . $request->url->path); # из каталога

}

}

$connection->close; # закрываем соединение

undef($connection); # удаляем объект

} # и все повторяется сначала...

А теперь пора перейти к созданию программ, выполняющихся на web-сервере и взаимодействующих с ним через интерфейс CGI.

Упоминавшийся уже интерфейс программирования CGI поддерживается всеми web-серверами. Сегодня CGI-программы разрабатываются не на чистом Perl, а с использованием различных вспомогательных модулей и библиотек. Возможно, самой популярной из них по праву считается стандартная библиотека CGI. С ее помощью можно писать CGI-программы проще, быстрее и надежнее. Разработка программ CGI на Perl описывается во многих специализированных книгах.

В качестве примера напишем простенькую "гостевую книгу" - программу, которая с помощью функций библиотеки CGI (start_html, textfield и т.д.) выводит HTML-страницу с формой для отправки на сайт отзывов посетителей. После отправки данных формы на сервер вызывается эта же CGI-программа, которая с помощью функции param проверяет, получены ли данные формы, и выводит присланный комментарий. Вот текст программы:

#!C:/usr/local/apache/Perl/bin/perl.exe

# в первой строке CGI-программы указан путь к perl

use CGI qw/:standard/; # применяем стандартные средства CGI

print # выводим в выходной поток

header(-charset=>'windows-1251'), # в кодировке CP1251:

start_html('Гостевая книга'), # шапку страницы,

h3('Здесь Вы можете оставить свой отзыв'),# заголовок,

Поделиться:
Популярные книги

Второгодка. Книга 4. Подавать холодным

Ромов Дмитрий
4. Второгодка
Фантастика:
героическая фантастика
альтернативная история
сказочная фантастика
6.25
рейтинг книги
Второгодка. Книга 4. Подавать холодным

История Второй мировой войны. Блицкриг

Фон Типпельскирх Курт
Вторая мировая. Взгляд врага
Научно-образовательная:
история
7.14
рейтинг книги
История Второй мировой войны. Блицкриг

Константин Коровин вспоминает…

Зильберштейн Илья Самойлович
Документальная литература:
биографии и мемуары
5.00
рейтинг книги
Константин Коровин вспоминает…

Судьба

Золотарёв-Якутский Николай Гаврилович
Проза:
историческая проза
советская классическая проза
5.00
рейтинг книги
Судьба

Они не люди. Книга третья

Фламмер Виктор
3. Они не люди
Фантастика:
детективная фантастика
городское фэнтези
5.00
рейтинг книги
Они не люди. Книга третья

Докер

Холопов Георгий Константинович
Проза:
военная проза
советская классическая проза
5.00
рейтинг книги
Докер

Записки Филиппа Филипповича Вигеля. Части первая — четвертая

Вигель Филипп Филиппович
Документальная литература:
биографии и мемуары
5.00
рейтинг книги
Записки Филиппа Филипповича Вигеля. Части первая — четвертая

Пушкин

Тынянов Юрий Николаевич
Я люблю Пушкина
Документальная литература:
биографии и мемуары
8.00
рейтинг книги
Пушкин

Сальто назад

Рогов Борис Григорьевич
2. Сальто мортале
Фантастика:
альтернативная история
5.00
рейтинг книги
Сальто назад

Славься, Темная Властительница!

ivan_kun
6.25
рейтинг книги
Славься, Темная Властительница!

Повседневная жизнь русского провинциального города в XIX веке. Пореформенный период

Митрофанов Алексей Геннадиевич
Живая история: Повседневная жизнь человечества
Научно-образовательная:
история
культурология
6.25
рейтинг книги
Повседневная жизнь русского провинциального города в XIX веке. Пореформенный период

Шерас

Стародубцев Дмитрий
Фантастика:
фэнтези
6.25
рейтинг книги
Шерас

Инноваторы. Как несколько гениев, хакеров и гиков совершили цифровую революцию

Айзексон Уолтер
Документальная литература:
биографии и мемуары
публицистика
5.00
рейтинг книги
Инноваторы. Как несколько гениев, хакеров и гиков совершили цифровую революцию

"Фантастика 2024-12". Компиляция. Книги 1-21

Шалашов Евгений Васильевич
Фантастика 2024. Компиляция
Фантастика:
фэнтези
боевая фантастика
детективная фантастика
альтернативная история
5.00
рейтинг книги
Фантастика 2024-12. Компиляция. Книги 1-21