|
|||||||||||
Jak na ISAPI skripty v Delphi?PinkNet Web Server je vybaven zßkladnφ podporou ISAPI skript∙, kterß mu umo╛≥uje spolupracovat s aplikacemi, kterΘ byli vyvinuty pro Win32 platformu v rozhranφ M$ Internet Server API - ISAPI.Psanφ skript∙ je pom∞rn∞ jednoduchΘ, pokud mßte alespo≥ p°edstavu jak se volajφ. Jß osobn∞ pou╛φvßm Delphi a proto nßsledujφcφ ukßzka bude prßv∞ pro n∞j. Zde je v²pis jedoduchΘho skriptu (dostupn² na adrese http://localhost/demo/cgi-bin/isapi_minimal.dll ve standartnφ instalaci PNWS): library ISAPI_Minimal; uses SysUtils, Classes, isapi2 in '\Program Files\Borland\Delphi\Source\RTL\WIN\isapi2.pas'; // Zalezi na velikosti pismen v nazvu !!!! function GetExtensionVersion(var ver: THSE_VERSION_INFO): Boolean; stdcall; begin result:=True; // Rekni, ze je vse OK -> sice nic nevracime, ale to nevadi end; // Zalezi na velikosti pismen v nazvu !!!! function HttpExtensionProc(var ecb: TEXTENSION_CONTROL_BLOCK): LongInt; stdcall; var FN_Write: TWriteClientProc; s: String; len: Integer; begin // Vytvor si funkci pro zapis dat @FN_Write:=@ecb.WriteClient; // Vytvor si do stringu S odpoved ve formatu HTML s:= 'HTTP/1.0 200 OK'#13#10#13#10; s:=s+'<html><head>'#13#10; s:=s+' <title>ISAPI skript</title>'#13#10; s:=s+'</head><body bgcolor=white>'#13#10; s:=s+'<h1>Generovanß strßnka</h1>'#13#10; s:=s+'Tento text je generovan² knihovnou ISAPI v serveru PNWS'#13#10; s:=s+'</body></html>'; len:=Length(s); // Zapis do prohlizece FN_WRITE(ecb.ConnID, PChar(s), len, 0) // No a to je asi vse... ...je jasne, ze skript nebude omezen jen na // jednoduche splacani neceho do stringu S, ale bude neco konat end; // Potreba pro export funkci exports GetExtensionVersion, HttpExtensionProc; begin end.Je jasnΘ, ╛e v∞t╣ina skript∙ pot°ebuje VSTUPN═ data a proto si ukß╛eme i jak si je od serveru zφstkat. Pro zφskßnφ dat pomocφ metody po╛adavky GET (tedy skript.dll?data) pou╛ijeme zßznam typu PChar dostupn² p°es jmΘno ecb.lpszQueryString. Data p°es metodu POST jsou ulo╛ena v bloku na kter² ukazuje pointer ecb.lpbData. Jejich velikost je urΦena prom∞nou ecb.cbTotalBytes. Pro zφskßnφ prom∞nΘ od serveru (nap°φklad jmΘno serveru, Φi typ prohlφ╛eΦe) m∙╛eme do procedury HttpExtensionProc p°idat nßsledujφcφ vno°enou proceduru: // Fuknce vracφ promenou prostredi od serveru function GetServerVar(name:string):string; var FN_GetVariable:TGetServerVariableProc; pch:PChar; len:integer; begin // Prirazeni procedury @FN_GetVariable:=@ecb.GetServerVariable; // maximalni velikost prichozich dat len:=1024; pch:=StrAlloc(len); // Zeptej se na data if FN_GetVariable(ecb.ConnID,PChar(name),pch,len) then result:=pch else result:='*nedefinovano*'; end; |
|||||||||||
|