Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.03.07;
Скачать: CL | DM;

Вниз

Как получать в CGI данные, переданные методом Post???   Найти похожие ветки 

 
NetBreaker666 ©   (2001-12-20 14:38) [0]

Пишу CGI как Console Application.
Как получить данные, переданные методом Post ????


 
panov ©   (2001-12-20 16:46) [1]

Если чего-то здесь не хватает - пиши. Вытаскивал из рабочего проекта.
В теле программы функции используются так:
var
str,p1,p2: String;
if GetMethod = "POST"
then Str := GetPostEnv
else Str := GetGetEnv;

p1 := ParamByName(Str,"dateselect");
p2 := ParamByName(Str,"paramdate");

модуль proc:

unit proc;
...
const
CR = CHR(13)+CHR(10);
BufSize = 4096;
...
//Определяем метод, которым запрошены данные.
//Возвращает "POST" или "GET"
function GetMethod: String;
var
buf: PChar;
begin
GetMem(buf,BufSize);
GetEnvironmentVariable(PChar("REQUEST_METHOD"),Buf,BufSize);
Result := String(buf);
FreeMem(buf);
end;
//Чтение переданной строки для метода POST
function GetPostEnv: String;
var
StdIn,Size,Actual: Cardinal;
begin
Result := "";
StdIn := GetStdHandle(STD_INPUT_HANDLE);
Size := SetFilePointer(StdIn,0,nil,FILE_END);
SetFilePointer(StdIn,0,nil,FILE_BEGIN);
SetLength(Result,Size);
if Size>0 then
begin
ReadFile(StdIn,Result[1],Size,Actual,nil);
end;
end;
//Чтение переданной строки для метода GET
function GetGetEnv: String;
var
buf: PChar;
begin
GetMem(buf,BufSize);
GetEnvironmentVariable(PChar("QUERY_STRING"),Buf,BufSize);
Result := String(buf);
FreeMem(buf);
end;
//Функция для декодирования переданной строки
function ParamByName(inParams: String;Name: String): String;
var
ss,st: String;
k: Integer;
begin
Result := "";
ss := InParams;
while Length(ss)>0 do
begin
k := Pos("&",ss);
if k>0 then
begin
st := Copy(ss,1,k-1);
ss := Copy(ss,k+1,10000);
end
else
begin
st := ss;
ss := "";
end;
k := Pos("=",st);
if K>0 then
begin
if Name=Copy(st,1,k-1) then
begin
Result := Decode(Copy(st,k+1,6000));
end;
end;
end;
end;
//Получение значения праметра из переданной строки по имени параметра
function ParamByName(inParams: String;Name: String): String;
var
ss,st: String;
k: Integer;
begin
Result := "";
ss := InParams;
while Length(ss)>0 do
begin
k := Pos("&",ss);
if k>0 then
begin
st := Copy(ss,1,k-1);
ss := Copy(ss,k+1,10000);
end
else
begin
st := ss;
ss := "";
end;
k := Pos("=",st);
if K>0 then
begin
if Name=Copy(st,1,k-1) then
begin
Result := Decode(Copy(st,k+1,6000));
end;
end;
end;
end;


 
Kapusto ©   (2001-12-21 10:31) [2]

Дурацкий вопрос: если пишется все это на Дельфи, то почему бы не использовать WebServer Application? И такого изврата не понадобится...


 
panov ©   (2001-12-21 13:29) [3]

>Kapusto © (21.12.01 10:31)

Поподробнее можно - по поводу вопроса NetBreaker666 © (20.12.01 14:38) ?


 
panov ©   (2001-12-21 13:33) [4]

... или попусту болтать надо?


 
Kapusto ©   (2001-12-21 14:07) [5]

Если пишется с использованием WebServer Application, то тогда на любой action создается процедура обработки типа:
procedure wmMainNewUserAction(Sender: TObject; Request: TWebRequest;
Response: TWebResponse; var Handled: Boolean);

TWebRequest.ContentFields содержат искомые параметры.
Пример использования:
Request.ContentFields.Values["usr_login"];


 
panov ©   (2001-12-21 14:14) [6]

Согласен - можно.
Т.к. незнаком с этой технологией, то пока могу сказать единственное - пустая программа с WebServer Application после компиляции
имеет размер 330к.
--------
У меня пока не было CGI размером >90К.


 
Kapusto ©   (2001-12-21 14:21) [7]

Согласен... Но у данного способа есть и преимущество: легкость конвертации в ISAPI-приложение, скорость разработки, легкость создания страниц "на лету", т.е. обработка страниц с определенными пользователем тегами. Подобное можно реализовать и на Perl, с его регулярными выражениями, а на чистом Object pascale придется повозиться... В общем, все зависит от задачи...



Страницы: 1 вся ветка

Текущий архив: 2002.03.07;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.011 c
4-19374
Burmistroff
2002-01-08 23:56
2002.03.07
Приостановка приложения


14-19347
mart
2002-01-19 03:14
2002.03.07
Билль о правах личности.


1-19192
cypher
2002-02-17 21:13
2002.03.07
NetFileEnum


4-19373
Voyager
2002-01-08 14:59
2002.03.07
Синхронизация процессов


14-19321
vajo
2002-01-22 12:49
2002.03.07
Win2000