PNWS Volejte +420 602 860 704  
Vítejte | Mailing list | Autor programu | Skvělý HTML editor Česká verze
 

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;



Výroba programů na zakázku
 
 
  O PinkNet Web Serveru | Demo vSHOP.pnws | Mailing list | Download | Oznámení o chybě