Студопедия

КАТЕГОРИИ:

АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Прямой доступ к интерфейсу CGI в Perl




В зависимости от метода данные формы передаются в CGI-программу или через стандартный ввод (POST), или через переменную среды QUERY_STRING (GET). Помимо этих данных CGI-программе доступна и другая информация, поступившая от клиента в заголовках запроса или предоставленная Web-сервером. Эта информация сохраняется в переменных среды операционных систем UNIX или Windows. В таблице перечислены переменныесреды, обычно используемые в CGI:

Переменная среды Описание
GATEWAY_INTERFACE Версия CGI, которую использует сервер.
SERVER_NAME Доменное имя или IP-адрес сервера.
SERVER_SOFTWARE Имя и версия программы-сервера, отвечающей на за­прос клиента (например, Apache 1.3).
SERVER_PROTOCOL Имя и версия информационного протокола, который был использован для запроса (например, HTTP 1.0).
SERVER_PORT Номер порта компьютера, на котором работает сервер (по умолчанию 80).
REQUEST_METHOD Метод, использованный для выдачи запроса (GET, POST).
PATH_INFO Дополнительная информация о пути.
PATH_TRANSLATED Та же информация, что и в переменной PATH_INFO с префиксом, задающим путь к корневому каталогу дерева Web-документов.
SCRIPT_NAME Относительное маршрутное имя CGI-сценария (напри­мер, /cgi-bin/program.pl).
DOCUMENT_ROOT Корневой каталог дерева Web-документов.
QUERY_STRING Строка запроса — информация, переданная в составе URL запроса после символа "?".
REMOTE_HOST Имя удаленной машины, с которой сделан запрос.
REMOTE_ADDR IP-адрес удаленной машины, с которой сделан запрос.
REMOTE_USER Идентификационное имя пользователя, посылающего запрос
CONTENT_TYPE Медиа-тип данных запроса, например, "text/html".
CONTENT_LENGTH Количество байт в теле запроса, переданных в CGI-программу через стандартный ввод.
HTTP_HOST Имя компьютера, на котором работает сервер
HTTP_FROM Адрес электронной почты пользователя, направившего запрос
HTTP_ACCEPT Список медиа-типов, которые может принимать клиент
HTTP_USER_AGENT Web-браузер, которым клиент пользуется для выдачи запроса
HTTP_REFERER URL-адрес документа, на который клиент указывал пе­ред обращением к CGI-программе
DATE_GMT Текущая дата и время по Гринвичу.
DATE_LOCAL Текущие местные дата и время.
DOCUMENT_NAME Имя файла (но не каталога) документа, запрошенного пользователем.
DOCUMENT_URI Путь к документу, запрошенному пользователем и закодированным для URL.
LAST_MODIFIED Дата и время последнего изменения документа, запрошенного пользователем.

 

CGI-программа на языке Perl имеет доступ к переменным среды через автоматически создаваемый интерпретатором хэш-массив %ENV, к элементам которого можно обратиться по ключу, совпадающему с именем переменной среды. 

Данные формы поступают в CGI-программу в закодированном виде, поэто­му в качестве первого шага обработки CGI-сценарий должен выполнить де­кодирование полученной информации. При пересылке данных методом GET данные формы, как видно из приведенного выше примера, присваиваются переменной среды QUERY_STRING, при пере­даче методом POST — передаются в программу через стандартный ввод и то­же могут быть присвоены некоторой внутренней переменной. Таким обра­зом, декодирование данных сводится к следующей последовательности ма­нипуляций со строкой:

- замена каждой группы "%hh", состоящей из шестнадцатеричного ASCII-кода "hh" с префиксом "%", на соответствующий ASCII-символ;

- замена символов "+" пробелами;

- выделение отдельных пар имя=значение, разделенных ограничителем "&";

- выделение из каждой пары имя=значение имени и значения соответст­вующего поля формы.

Вывод CGI-программы в интерфейс CGI выполняется с помощью функции print, которая направляет данные в стандартный выводной поток, причем первой должна быть выведена строка заголовка протокола HTTP (поле "Content-type"), как в следующем примере:

 

#!/usr/bin/perl

# Создание заголовка HTTP

print "Content-type:text/html\n\n";         

# Созданиезаголовка Web-страницы

print "<HTML><HEAD><TITLE>HelloWorld Page",

"</TITLE></HEAD><BODY>";

# Создание заголовка первого уровня   

print "<H1>Hello, world</H1>";         

# Создание окончания Web-страницы

print "</BODY><HTML>";

                                  

С использованием конструкции "heredocument" ("документ здесь") предыдущий пример можно записать следующим образом:

 

print<<TEST_WEB_PAGE;

Content-type:text/html\n\n 

<HTML><HEAD><TITLE>HelloWorld Page</TITLE></HEAD><BODY>

<H1>Hello, world</H1>

</BODY><HTML>

TEST_WEB_PAGE

 

Использование модуля CGI в Perl

Для написания CGI-программ для доступа к интерфейсу CGI можно использовать модуль CGI, входящий в состав стандартной поставки Perl. Этот модуль включается в программу с помощью оператора use:

 

useCGI;

Стили программирования CGI-программ

При создании CGI-программ с помощью модуля CGI можно использовать один из двух стилей программирования: объектно-ориентированный и стиль, ориентированный на использование функций.

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

Например, простая Web-страница, содержащая приветствие "Hello, world" может быть создана с помощью объектно-ориентированного стиля с помощью следующей последовательности операторов:

 

#!/usr/bin/perl -w

UseCGI;           # Загрузка модуля CGI

$q = newCGI;                  # Создание нового объекта CGI

print $q->header, # Создание заголовка HTTP

       # Создание заголовка Web-страницы

$q->start_html('HelloWorldPage'),

       # Создание заголовка первого уровня

$q->h1('Hello, world'),                          

    $q->end_html; # Создание окончания Web-страницы

 

При использовании стиля, ориентированного на функции, для получения данных из форм, формирования Web-страницы и других действий вызываются функции модуля CGI. Так, та же страница, созданная с помощью стиля, ориентированного на функции, выглядит следующим образом:

 

#!/usr/bin/perl

       # Загрузка стандартных функций CGI

Use CGI qw/:standard/;                        

       printheader,                # СозданиезаголовкаHTTP

       # СозданиезаголовкаWeb-страницы

Start_html('HelloWorldPage'),       

       # Создание заголовка первого уровня

H1('Hello, world'),                      










Последнее изменение этой страницы: 2018-04-12; просмотров: 349.

stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда...