Текущий архив: 2004.08.01;
Скачать: CL | DM;
ВнизНаписание CGI-приложения посредством Delphi Найти похожие ветки
← →
Интернетчик (2004-06-03 02:38) [0]Мне необходимо создать CGI-приложение именно на Delphi, а не на Perl, например. Причина в том, что я использую функции сжатия, шифрования данных, и это у меня написано и работает на Delphi, Надо, чтобы программа работала в качестве полноценного CGI скрипта... Например, мне присылают (POSTом) данные, мне нужно их обработать, как в простой прорамму, и сгенерировать ответ. И также важно, чтобы это дело не весило пол
мегабайта из-за форм.
Подскажите, пожалуйста...
← →
piople © (2004-06-03 04:32) [1]Так в чем проблема то??? Работай с cgi скриптом по средством консольного приложения!
Хотя честно говоря лучше всего их писать в виде библиотек ISAPI или NSAPI.
Но раз надо малый размер, то пиши консольное приложение.
Пример:
Моя библиотека для работы с общим шлюзовым интерфейсом(CGI):
unit cgiwork;
interface
uses SysUtils, Windows;
function HexToInt(CH : char): integer;
function Decode(Value: string; CH: String): string;
function ParamByName(Name: string; CH: String): string;
function LowCase(ch: Char) : Char;
function ChangeChar(Value, CHOld, CHNew: String): string;
function GetEV(Param: String): String;
implementation
// Полечение переменной сетового окружения
function GetEV(Param: String): String;
begin
result := GetEnvironmentVariable(PChar(Param));
end;
// Функция замены символов в строке
function ChangeChar(Value, CHOld, CHNew: String): string;
begin
while Pos(CHOLD, Value) > 0 do
Value := Copy(Value,0,Pos(CHOld, Value)-1) + CHNew + Copy(Value,Pos(CHOld, Value) + Length(CHOld),Length(Value));
result := Value;
end;
// Переделываем буквы в нижний регистр
function LowCase(ch: Char): Char;
begin
Result := ch;
case Result of
"А".."Я": Dec(Result, Ord("А") - Ord("а"));
"A".."Z": Dec(Result, Ord("A") - Ord("a"));
end;
end;
// Переделываем из Hex в Int
function HexToInt(CH : char): integer;
begin
Result:=0;
case CH of
"0".."9": Result:=Ord(CH)-Ord("0");
"A".."F": Result:=Ord(CH)-Ord("A")+10;
"a".."f": Result:=Ord(CH)-Ord("a")+10;
end;
end;
// Декодировать параметр
function Decode(Value: string; CH: String): string;
var
i, L: integer;
begin
Result:="";
L:=0;
Value := ChangeChar(Value, "%0D%0A", " ");
for i := 1 to Length(Value) do
begin
if(Value[i] <> "%") and (Value[i] <> "+") and (L<1) then
begin
Result := Result + Value[i];
end
else
begin
if(Value[i] = "+") then
Result := Result + " "
else if(Value[i] = "%") then
begin
L := 2;
if(i < Length(Value) - 1) then
begin
Result := Result + Chr(HexToInt(Value[i+1]) * 16 +
HexToInt(Value[i+2]));
end;
end
else
Dec(L);
end;
end;
end;
// Получаем значение переметра
function ParamByName(Name: string; CH: String): string;
var
SS, ST : string;
K : integer;
begin
Result := "";
if GetEnvironmentVariable(PChar("REQUEST_METHOD")) = "GET" then SS := GetEnvironmentVariable(PChar("QUERY_STRING"));
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), CH);
end;
end;
end;
end;
end.
Ну и сам пример консольного приложения:
program AddWord;
{$APPTYPE CONSOLE}
{$E cgi}
uses
SysUtils,
Windows,
cgiwork;
var
Name, Mail, Text : string;
begin
// Получаем Name, Mail, Text
Name := ParamByName("nameUs", " "); //Второй параметр указыае на что заменять каретку перехода на новую строку
Mail := ParamByName("mailUs", " ");
Text := ParamByName("Soobj", " ");
WriteLn("Content-Type: text/html");
WriteLn;
WriteLn;
WriteLn("<HTML>");
WriteLn("<HEAD>");
WriteLn("<META http-equiv=Content-Type content="text/html; charset=windows-1251">");
WriteLn("<META content="MSHTML 6.00.2800.1106" name=GENERATOR>");
WriteLn("</HEAD>");
WriteLn("<TABLE cellSpacing=1 cellPadding=1 width="100%" border=0>");
WriteLn("<TR>");
WriteLn("<TD >Полученные данные</TD></TR>");
WriteLn("<TR>");
WriteLn("<TD colSpan=4 height=20>");
WriteLn("<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>");
WriteLn("<TR>");
WriteLn("<TD align=Middle><font color=#CCFFFF>");
WriteLn("<TR><TD><FONT color=#99FFFF>");
WriteLn("<TABLE cellSpacing=0 cellPadding=0 width="100%" align=center border=0>");
WriteLn("<TR><TD colSpan=7></TD></TR>");
WriteLn("<TR ><TD colSpan=7></TD></TR>");
WriteLn("<TR class=TABL vAlign=center><font color=#ffffff><TD align=center width=100%>");
WriteLn("<P align=justify id=mysample> ");
WriteLn("<center>Name: " + Name + "</center>");
WriteLn("<center>Mail: " + Mail + "</center>");
WriteLn("<center>Text: " + Text + "</center>");
WriteLn("
");
WriteLn("</Table>");
WriteLn("</TBody>");
WriteLn("</HTML>");
end.
Ну как вызвать я думаю сам додумаешься. Вообщем так передаешь 3-и перематра скрипту методо GET. Ну и само сабой не забудь IIS поставить.
З.Ы. Если что не понятно пиши на аську или мыло.
Страницы: 1 вся ветка
Текущий архив: 2004.08.01;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.038 c