Передача информации 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-программой, сделать невозможно.

Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: