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

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

Жанры

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

Swart Bob

Шрифт:

begin

FDosEnvList.Free;

FDosEnvList := nil;

inherited Destroy

end {Destroy};

function TBDosEnvironment.GetDosEnvCount: Word;

begin

Result := 0;

if Assigned(FDosEnvList) then Result := FDosEnvList.Count

end {GetDosEnvCount};

function TBDosEnvironment.GetDosEnvStr(Const Name: String): String;

var i: Integer;

Tmp: String;

begin

i := 0;

Result := '';

if Assigned(FDosEnvList) then while i <FDosEnvList.Count >do

begin

Tmp := FDosEnvList[i];

Inc(i);

if Pos(Name,Tmp) = 1 then

begin

Delete(Tmp,1,Length(Name));

if Tmp[1] = '=' then

begin

Delete(Tmp,1,1);

Result := Tmp;

i := FDosEnvList.Count { end while-loop }

end

end

end

end {GetDosEnvStr};

 end.

Данный

компонент получает список переменных среды во время своего создания. Свойство DosEnvCount и DosEnvList является свойством только для чтения и поэтому лучше его создавать его в на ходу, а не бросать на форму, так как берется только 'свежий' список переменных среды, а не загружается из .DFM файла).

2.2.4. Анализ

Среди переменных среды есть переменная с именем REQUEST_METHOD. Она должна иметь значение POST для нашего примера (Я не люблю другие методы). Затем мы должны найти размер информации, которая передана нам. Для этого мы должны получить переменную CONTENT_LENGTH. Сама информация поступает к нам через стандартный ввод (без маркера конца файла, поэтому наша задача не пытаться читать больше, чем нам передано). Данные поступающие через стандартный ввод имеют следующую форму FIELD=VALUE и разделяется с помощью символа '&'. Например: AUTHOR="Bob_Swart"&. Поскольку мы имеем весь входной поток, как одну длинную строку, то мы можем быстро найти параметр AUTHOR с помощью следующей функции:

 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};

Следующий

шаблон кода показывает как динамически создать переменную TBDosEnvironment, прочитать информацию со стандартного ввода и получить строку готовую для анализа переменных формы.

 {$APPTYPE CONSOLE}

 var

Data: String;

ContentLength,i,j: Integer;

 begin

writeln('HTTP/1.0 200 OK');

writeln('SERVER: Dr.Bob''s Intranet WebServer 1.0');

writeln('CONTENT-TYPE: TEXT/HTML');

writeln;

writeln('<HTML>');

writeln('<BODY>');

writeln('<I>Generated by Dr.Bob''s CGI-Expert on </I>',DateTimeToStr(Now));

with TBDosEnvironment.Create(nil) do

begin

for i := 0 to Pred(DosEnvCount) do

begin

if Pos('REQUEST_METHOD',DosEnvList[i]) 0 then

begin

Data := DosEnvList[i];

Delete(Data,1,Pos('=',Data))

end

end;

if Data = 'POST' then

begin

ContentLength := StrToInt(GetDosEnvStr('CONTENT_LENGTH'));

SetLength(Data,ContentLength+1);

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

Под маской, или Страшилка в академии магии

Цвик Катерина Александровна
Фантастика:
юмористическая фантастика
7.78
рейтинг книги
Под маской, или Страшилка в академии магии

Повелитель механического легиона. Том III

Лисицин Евгений
3. Повелитель механического легиона
Фантастика:
фэнтези
аниме
5.00
рейтинг книги
Повелитель механического легиона. Том III

Генерал Скала и сиротка

Суббота Светлана
1. Генерал Скала и Лидия
Любовные романы:
любовно-фантастические романы
6.40
рейтинг книги
Генерал Скала и сиротка

Кодекс Крови. Книга IХ

Борзых М.
9. РОС: Кодекс Крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга IХ

Стеллар. Трибут

Прокофьев Роман Юрьевич
2. Стеллар
Фантастика:
боевая фантастика
рпг
8.75
рейтинг книги
Стеллар. Трибут

Повелитель механического легиона. Том II

Лисицин Евгений
2. Повелитель механического легиона
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Повелитель механического легиона. Том II

Жаба с кошельком

Донцова Дарья
19. Любительница частного сыска Даша Васильева
Детективы:
иронические детективы
8.26
рейтинг книги
Жаба с кошельком

Мастер 4

Чащин Валерий
4. Мастер
Фантастика:
героическая фантастика
боевая фантастика
попаданцы
5.00
рейтинг книги
Мастер 4

Возвышение Меркурия. Книга 5

Кронос Александр
5. Меркурий
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Возвышение Меркурия. Книга 5

Я еще князь. Книга XX

Дрейк Сириус
20. Дорогой барон!
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Я еще князь. Книга XX

Книга 4. Игра Кота

Прокофьев Роман Юрьевич
4. ОДИН ИЗ СЕМИ
Фантастика:
фэнтези
боевая фантастика
рпг
6.68
рейтинг книги
Книга 4. Игра Кота

Черный Маг Императора 5

Герда Александр
5. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Черный Маг Императора 5

Дракон с подарком

Суббота Светлана
3. Королевская академия Драко
Любовные романы:
любовно-фантастические романы
6.62
рейтинг книги
Дракон с подарком

Страж Кодекса. Книга II

Романов Илья Николаевич
2. КО: Страж Кодекса
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Страж Кодекса. Книга II