Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2002.03.07;
Скачать: [xml.tar.bz2];

Вниз

Как получать в 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.004 c
1-19141
Sergy
2002-02-18 12:15
2002.03.07
Определить подстроку в строке


4-19392
otari
2002-01-05 20:05
2002.03.07
помогите мне нужно код


3-19108
HDD
2002-02-11 13:10
2002.03.07
Помогите люди добрые!


1-19209
Игорь М
2002-02-19 10:44
2002.03.07
Печать на LBP 810


1-19228
dart
2002-02-19 12:21
2002.03.07
Один вопрос... :)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский