Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПЗ_4_Применение CGI-скриптов.doc
Скачиваний:
5
Добавлен:
20.08.2019
Размер:
6.8 Mб
Скачать

Пример использования метода get

Выше уже было сказано, что переменная среды окружения QUERY_STRING

содержит список имен и значений параметров, переданных из формы. Рассмотрим листинг HTML:

<HTML>

<body >

<form method="GET" action="program.exe">

<input type=text name="toto" value="text">

<input type=submit value="GO">

</form>

</body>

</HTML>

На экране эта форма будет выглядит следующим образом:

Рисунок 14 - Форма ввода представленная выше

При щелчке мыши на кнопке "GO", запускается на сервере программа "program.exe", передавая серверу запрос в виде:

http://www.ваш_сервер/cgi-bin/program.exe?toto=titi

Сразу за именем программы следует знак вопроса и передаваемый в программу параметр. В переменную QUERY_STRING как раз и будет помещено все, что находится после символа "?". Заметим, что точно так же можно задать параметры и в обычной ссылке:

<HTML>

<HEAD>

<TITLE>Передача параметров</TITLE>

<a href="http://www.ваш_сервер/cgi-bin/program.exe?toto=titi">

program.exe </a>

<HEAD>

<HTML>

Если запрос содержит несколько параметров, то они отделяются друг от друга амперсандом &. Кроме того, некоторые символы в значениях параметров (например, "&") должны быть представлены в шестнадцатеричной форме %hh, где "hh" - шестнадцатеричный код символа в таблице ANSI. Например, символ амперсанда "&" должен быть представлен в виде "%26".

Пусть требуется на сайте yahoo.com найти результаты поиска по ключевым словам cgi и delphi, для чего в окне поиска необходимо ввести строку "cgi + delphi".

Тогда в результате запроса будет сгенерирован следующий URL:

http://search.yahoo.com/bin/search?p=cgi+%2B+delphi

Тем самым, произойдет обращение к программе "search" и задано значение параметра "p" равным "cgi + delphi", при этом символ "+" будет автоматически заменен броузером на "%2B" т.е на шестнадцатеричный код сивола "+" , а пробелы - на "+".

Пример использования метода post

Для получения данных, переданных по методу POST, необходимо читать данные из "устройства стандартного ввода", обозначаемое как STDIN. Размер данных, переданных по этому методу, помещается сервером в переменную окружения CONTENT_LENGTH. Это выглядит в Delphi так:

// Получение переданных параметров

if getvar('REQUEST_METHOD')='POST' then begin

parmstring:=getvar('CONTENT_LENGTH');

if parmstring<>'' then begin

size:=strtoint(parmstring);

setlength(parmstring,size);

for i:=1 to size do read(parmstring[i]);

end;

end else

parmstring:=getvar('QUERY_STRING');

Пример CGI-программы, которая просто выводит то, что происходит на сервере:

program log;

{$apptype console}

uses

windows, sysutils;

var

I:integer;

s:string;

p:pchar;

flog:textfile;

begin

assignfile(flog,'c:\temp\log.txt');

rewrite(flog);

WriteLn('Content-Type: text/html');

WriteLn('');

WriteLn('<html><head><title>Dump CGI</title></head><body>');

WriteLn('<h1>Dump CGI:</h1>');

WriteLn('<a href=#Parms>Параметры программы</a><br>');

WriteLn('<a href=#Query>Параметры CGI</a><br>');

WriteLn('<a href=#Env>Переменные окружения</a><br>');

WriteLn('<a href=#Info>Дополнительная информация о CGI</a><br>');

WriteLn('<hr>');

WriteLn('<a name=Parms><h2>ParamCount=',IntToStr(ParamCount),'</h2><ul>');

WriteLn(fLog,'ParamCount=',IntToStr(ParamCount));

for i:=0 to ParamCount do begin

WriteLn('<li>',ParamStr(i));

WriteLn(fLog,'-',ParamStr(i));

end;

// Стандартный Ввод

WriteLn(fLog,'Input :');

WriteLn('<h2>StdInput:</h2><ul>');