Поиск

Передача информации CGI-программе

CGI-программа, начавшая свое выполнение в результате передачи данных формы, должна обработать имена и значения полей, называемых параметрами. Для этого в модуле CGI имеется функция param.

Если вызвать эту функцию без аргументов, она возвратит имена полей, переданных CGI-программе. Если CGI-программе передается форма, HTML-код которой приведен в листинге 18.1, функция param возвратит список description, sex, name и submit.

Если у функции param имеется аргумент, она возвратит значение этого параметра. Например, вызов param ('sex') возвратит значение переключателей — male или female, в зависимости от того, какой переключатель был выделен.

В листинге 18.2 приведена короткая CGI-программа для вывода этих параметров.

Если параметр, указанный в аргументе функции рагага, не используется в форме, функция возвращает значение under.

Методы GET и POST

В форме, текст которой приведен в листинге 18.1, у дескриптора <FORM> имеется атрибут method. Этот атрибут определяет, каким образом Web-броузер должен передавать данные Web-серверу. На данный момент существуют два метода.

Первый метод (он используется по умолчанию, т.е. в том случае, когда в дескрипторе <F0RM> не указан атрибут method) — GET. При этом методе значения элементов формы передаются в CGI-программу в закодированном виде как часть URL. При работе в Internet часто можно видеть подобные URL:

CGI-программа преобразует последнюю часть URL и получит поля и их значения. Это происходит при вызове функции param. He пытайтесь получить эти значения другим способом. Функция param идеально подходит для этого, и у вас едва ли возникнет необходимость воспользоваться другим кодом для извлечения значений полей.

Другой метод, POST, позволяет добиться того же результата, но другими средствами. При этом значения элементов формы не добавляются к URL, а пересылаются на стандартный вход CGI-программы после установки соединения с Web-сервером. Тонкости этого процесса вам знать не обязательно, в модуле CGI все они уже учтены. Как и раньше, для получения в программе значений полей достаточно вызвать функцию param.

В Internet или в других книгах можно встретить CGI-программы, которые проверяют переменную окружения QUERY__ STRING ИЛИ REQUEST_METHOD, чтобы определить, какой был использован метод — GET или POST. Эти программы пытаются воспроизвести функциональность стандартного модуля CGI и, вероятно, не столь успешно. Не делайте этого в ваших программах.

Итак, какой же метод выбрать? Каждый метод имеет свои преимущества и недостатки. Метод GET позволяет в Web-броузере создать закладку на URL, генерирующий данную страницу. Например, на URL

может быть сделана закладка и в дальнейшем в любой момент вызвана. Для CGI-программы sample.pl неважно, заполняли ли вы на самом деле форму или нет. Ей важно получить параметры для выполнения CGI-программы. Возможность многократного вызова CGI-программы при использовании метода GET называется идемпотентностью.

Возможно, вам не нужно, чтобы в Web-броузере можно было сделать закладку, непосредственно запускающую CGI-программу на вашем сервере. К тому же, следует заметить, что URL при использовании метода GET выглядит очень некрасиво.

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