PNWS Volejte +420 602 860 704  
Vítejte | Mailing list  
Co to je PNWS?
Jak spravovat server?

Konfigurace TCP/IP
Nastavení serveru 1.0.7.3
Nastavení serveru 1.0.7.4
Web Administrace
Soubor HTTP.AUT
Instalace PERLU 5.0
Instalace PHP for Win32
Jak vytvářet stránky
Stručný úvod do HTML
Jak na CGI aplikace v PERLu
Jak na ISAPI skripty v Delphi
Omezení ISAPI v PNWS
Úvod do PHP
Jak používat SSI
Co to je PNWS-SSL
Jak sehnat platný certifikát
Jak si vyrobit testovací certifikát
Knihovna SSLeay, licence
Užitečné nástroje
Bug report

Oznámení o chybě
Download center
Mailing list
Licence PNWS
 

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;
 
 
  O PinkNet Web Serveru | Demo vSHOP.pnws | Mailing list | Download | Oznámení o chybě
 
Kontakt