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

Вниз

Написание 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.048 c
3-1089363561
Vladimiruss
2004-07-09 12:59
2004.08.01
Поиск и фильтрация данных


1-1090243039
Natalie_Q
2004-07-19 17:17
2004.08.01
Из Delphi в HTML


11-1077998244
hermit
2004-02-28 22:57
2004.08.01
Вопрос по KOL Memo


3-1089271010
WWW
2004-07-08 11:16
2004.08.01
єсть разница в использониє AdoTable и AdoQuery


1-1090283167
Alexey Leonchik
2004-07-20 04:26
2004.08.01
Функция округления





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский