Einen eigenen lokalen HTTP Webserver in Delphi zu erstellen, ist mit dem dwf Web Framework für Delphi eine Sache weniger Zeilen Quelltext.
Delphi-Quellcode:
program ExampleWebServer;
...
begin
// Anwendungskontext festlegen (gilt für alle nachfolgenden Path Anweisungen)
&Context('
myapp');
// URL-Pfad unterhalb des Kontexts festlegen
&Path('
helloworld');
// Der Code für das Erzeugen einer Antwort auf eintreffende HTTP GET Anfagen
GET
(
procedure(Request: TRequest; Response: TResponse)
begin
Response.ContentText :=
'
<html><title>Hello world</title>Hello world!</html>';
end);
// Server starten
StartServer;
// Ende
WriteLn('
Die Test-URL ist: http://127.0.0.1/myapp/helloworld');
ReadLn;
end.
Und ein Beispiel für HTTP POST, mit einem Formular:
Delphi-Quellcode:
program ExampleWebServer;
...
begin
// HTML FORM example --------------------------------------------------
&Path('
form');
// The Delphi method will process HTTP GET requests -------------------
GET
(
procedure(Request: TRequest; Response: TResponse)
begin
Response.ContentText := '
<html><form method="POST" action="form">'
+'
<input name="var" value="hello world"><input type="submit"></form></html>';
end);
&Path('
form');
// The Delphi method will process HTTP POST requests -------------------
POST
(
procedure(Request: TRequest; Response: TResponse)
begin
Response.ContentText := '
var=' + Request.Params.Values['
var'];
end);
StartServer;
// wait ---------------------------------------------------------------
WriteLn('
Server is running. Hit any key to terminate.');
ReadLn;
end.
"Pfad-Parameter" können auch über Platzhalter definiert werden, und stehen im Handler dann als normale Requestparamter zur Verfügung:
Delphi-Quellcode:
program ExampleWebServer;
...
begin
&Path('
params/{p1}/{p2}');
&Produces('
text/html');
GET
(
procedure(Request: TRequest; Response: TResponse)
begin
Response.ContentText :=
Format('
<html><title>Hello world</title>Hello world! ... %s %s</html>',
[Request.Params.Values['
p1'], Request.Params.Values['
p2']]);
end);
StartServer;
WriteLn('
Server is running. Hit any key to terminate.');
ReadLn;
end.
Last but not least - ein Beispiel mit HTTP Server Sessions:
Delphi-Quellcode:
program Example3Sessions;
...
begin
// The Delphi method will process HTTP GET requests -------------------
&Path('counter');
GET
(procedure(Request: TRequest; Response: TResponse)
var
NextCounter: string;
begin
NextCounter := IntToStr(1 + StrToIntDef(Request.Session.Content.Values['Counter'], 0));
Request.Session.Content.Values['Counter'] := NextCounter;
Response.ContentText := 'Counter: ' + NextCounter;
end);
StartServer;
// wait ---------------------------------------------------------------
WriteLn('Server is running. Hit any key to terminate.');
ReadLn;
end.
Update:
Das dwf Framework wurde inzwischen in die Habari Web Components Library (Version 1.0.1) integriert, in Form der TdjRestfulComponent.
Ein englischsprachiger Blogartikel ist hier im Web:
http://mikejustin.wordpress.com/dwf/