Поиск

Подробнее о вызове CGI-программ

До сих пор мы говорили о двух разных методах запуска CGI-программ. Первый и самый очевидный — просто поместить ее URL в гиперссылку или ввести его в поле Адрес окна броузера. Например, чтобы выполнить CGI-программу с именем time.cgi, используйте следующую строку:

После установки сеанса связи Web-сервер выполнит CGI-программу time.cgi и отправит броузеру результат ее работы, т.е. образ новой Web-страницы. Это пример запуска простейшей CGI-программы, подобной той, которую мы рассматривали на 17-м занятии, "Введение в CGI".

Другой способ запуска CGI-программы — включение ее имени в код HTML-формы. Например, следующая форма вызывает CGI-программу process.cgi после щелчка на кнопке подачи запроса Submit:

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

Передача параметров CGI-программе

Полезность и гибкость CGI-программ существенно возрастают за счет передачи им дополнительных параметров прямо из гиперссылки. Например, можно создать гиперссылку в документе, которая запускает CGI-программу foo.cgi и передает ей два параметра X и Y, равных некоторым величинам. Для этого в дескрипторе <А HREF> нужно задать URL специального вида. Формат этого URL показан на рис. 20.1.

Каждый параметр представляет собой имя некоторого значения, которое будет передано CGI-программе (подобно именованному элементу HTML-формы). Под значением параметра понимается некоторая строка, присваиваемая этому имени. Например, чтобы создать гиперссылку, после щелчка на которой будет выполнена CGI-программа с параметрами sign и year, которым присвоены значения Овен и 1969 соответственно, используется следующий HTML-код:

Внутри CGI-программы параметры обрабатываются функцией param модуля CGI обычным способом:

Передать можно любое количество параметров. Если нужно передать пустой параметр (без значения), просто используйте одно его имя, подобно тому, как мы поступили с параметром author в следующем примере:

Использование специальных символов

При вызове CGI-ггрограмм с параметрами следует знать о существовании некоторых специальных символов, которые не могут быть частью URL. Например, символ ? (знак вопроса) является специальным и отделяет основную часть URL от списка параметров. К числу других специальных символов относятся такие символы, как &, пробелы и кавычки.

Полный список специальных символов приведен в документе стандартов Internet RFC 2396.

Чтобы сделать один или несколько специальных символов частью URL, нужно закодировать их специальным образом. Это означает, что ASCII-значение этого символа следует преобразовать в двузначное шестнадцатеричное число, а затем поместить перед ним символ процента. Результат применения описанного "рецепта" кодирования для фразы "Привет, мир!" выглядит следующим образом (В этом примере русский текст использован только для наглядности. При передаче же кириллических символов в виде параметров URL их нужно закодировать точно так же, как и специальные символы.):

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

Этот фрагмент программы создает правильно закодированную (с учетом требований к URL) HTML-ссылку. Обратите внимание на то, как в этом коде используется модуль CGI: use CGI qw(:all escape). При использовании модуля CGI функция escape обычно недоступна для программы, и в случае необходимости вам придется указать ее в операторе use в явном виде.

Следующая программа создает более длинный URL-адрес с закодированными значениями специальных символов:

Построенное в результате этой программы значение URL будет иметь следующий вид:

Последний символ & в конце URL игнорируется CGI-программой при выделении параметров с помощью функции param.