Чтение онлайн

на главную - закладки

Жанры

Интернет решения от доктора Боба

Swart Bob

Шрифт:

<FORM ACTION=http://www.drbob42.com/cgi-bin/debug.exe METHOD=POST>

</FORM

Данная HTML CGI форма посылает свои данные методом POST на мой web сервер, и выполняет программу debug.exe (из каталога cgi-bin). В данный момент мы пока не знакомы с концепцией различий между методами POST и GET (Я всегда использую метод POST). Мы заметим, что здесь пока нет ничего что бы посылать на сервер методом POST, это позже. Мы должны указать поля ввода внутри CGI формы. Для этого мы поместим некоторое количество наиболее стандартных Windows

органов управления, все они предопределены, подобно editbox, memo, listbox, drop-down combobox, radiobuttons, checkboxes и конечно клавиши "action" (reset или submit).

Простой editbox это поля ввода типа "text", которое обязано иметь имя и необязательно размер и ширину в пикселях, и может иметь значение:

<INPUT TYPE=text NAME=login SIZE=8>

Результатом этой фразы будет нарисован editbox в котором можно ввести до восьми символов, и которое будет послано нашему CGI приложению как "login=xxxxxxxx", где xxxxxxxx данные введенные на форме в окошке подобному этому

Стандартное CGI приложение обязано проверить переменную среды REQUEST-METHOD для определения метода передачи данных. В случае POST, мы должны проверить CONTENT-LENGTH для определения количества символов, которые необходимо прочесть со стандартного ввода. Стандартный ввод содержит данные (такие как "login-xxxxxxxx") для нашего CGI приложения.

Вместо написания сложного стартового кода для каждого CGI приложения, я написал модуль DrBobCGI для выполнения всех необходимых стартовых процедур и извлечения входных данных и доступных затем через вызов единственной функции, называемой "Value". Так для выше приведенного примера мы можем вызвать "Value('login')" для получения строки 'xxxxxxxx'.

unit DrBobCGI;

 {$I-}

 interface

 var

ContentLength: Integer = 0;

function Value(const Field: ShortString): ShortString;

{ use this function to get the CGI inputquery values }

 implementation

 uses

SysUtils, Windows;

 var

Data: String = '';

function Value(const Field: ShortString): ShortString;

var

i: Integer;

begin

Result := '';

i := Pos(Field+'=',Data);

if i > 0 then

begin

Inc(i,Length(Field)+1);

while Data[i] <> '&' do

begin

Result := Result + Data[i];

Inc(i)

end

end

end {Value};

 var

P: PChar;

i: Integer;

Str: ShortString;

 type

TRequestMethod = (Unknown,Get,Post);

 var

RequestMethod: TRequestMethod = Unknown;

 initialization

P := GetEnvironmentStrings;

while P^ <> #0 do

begin

Str := StrPas(P);

if Pos('REQUEST_METHOD=',Str) > 0 then

begin

Delete(Str,1,Pos('=',Str));

if Str = 'POST' then RequestMethod := Post

else

if Str = 'GET' then RequestMethod := Get

end;

if Pos('CONTENT_LENGTH=',Str) = 1 then

begin

Delete(Str,1,Pos('=',Str));

ContentLength := StrToInt(Str)

end;

if Pos('QUERY_STRING=',Str) > 0 then

begin

Delete(Str,1,Pos('=',Str));

SetLength(Data,Length(Str)+1);

Data := Str

end;

Inc(P, StrLen(P)+1)

end;

if RequestMethod = Post then

begin

SetLength(Data,ContentLength+1);

for i:=1 to ContentLength do read(Data[i]);

Поделиться:
Популярные книги

Метатель

Тарасов Ник
1. Метатель
Фантастика:
боевая фантастика
попаданцы
рпг
фэнтези
фантастика: прочее
постапокалипсис
5.00
рейтинг книги
Метатель

Магия чистых душ

Шах Ольга
Любовные романы:
любовно-фантастические романы
5.40
рейтинг книги
Магия чистых душ

Барон Дубов

Карелин Сергей Витальевич
1. Его Дубейшество
Фантастика:
юмористическое фэнтези
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Барон Дубов

#Бояръ-Аниме. Газлайтер. Том 11

Володин Григорий Григорьевич
11. История Телепата
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
#Бояръ-Аниме. Газлайтер. Том 11

Барон диктует правила

Ренгач Евгений
4. Закон сильного
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Барон диктует правила

Попытка возврата. Тетралогия

Конюшевский Владислав Николаевич
Попытка возврата
Фантастика:
альтернативная история
9.26
рейтинг книги
Попытка возврата. Тетралогия

Долгий путь домой

Русич Антон
Вселенная EVE Online
Фантастика:
космическая фантастика
попаданцы
6.20
рейтинг книги
Долгий путь домой

Гардемарин Ее Величества. Инкарнация

Уленгов Юрий
1. Гардемарин ее величества
Фантастика:
городское фэнтези
попаданцы
альтернативная история
аниме
фантастика: прочее
5.00
рейтинг книги
Гардемарин Ее Величества. Инкарнация

Завод-3: назад в СССР

Гуров Валерий Александрович
3. Завод
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Завод-3: назад в СССР

Решала

Иванов Дмитрий
10. Девяностые
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Решала

Камень. Книга пятая

Минин Станислав
5. Камень
Фантастика:
боевая фантастика
6.43
рейтинг книги
Камень. Книга пятая

Отдельный танковый

Берг Александр Анатольевич
1. Антиблицкриг
Фантастика:
боевая фантастика
альтернативная история
5.00
рейтинг книги
Отдельный танковый

Метатель. Книга 3

Тарасов Ник
3. Метатель
Фантастика:
попаданцы
альтернативная история
рпг
фэнтези
фантастика: прочее
постапокалипсис
5.00
рейтинг книги
Метатель. Книга 3

Боярышня Евдокия

Меллер Юлия Викторовна
3. Боярышня
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Боярышня Евдокия