Grob gesagt: WebServer mit Delphi erstellen: Geht.
Man kann auch mit einem Hammer eine Schraube in die Wand bekommen. Die Frage ist nur, ob das das optimal geeignete Werkzeug für diese Aufgabe ist. Und wenn es schon Delphi sein muss, würde ich mich nicht selbst kasteien, sondern lieber auf entsprechende Frameworks zurückgreifen (dieses TMS-Dings, mORMot, DMVC, MARS Curiosity etc.).
Es geht doch garnicht darum ein optimales Werkzeug für was auch immer zu finden, sondern darum zu versuchen, ob es geht. Zumindest verstehe ich die Aufgabenstellung im Eingangsthread so.
Und nein, wenn man's mit reinem Delphi und den Indykomponenten macht, muss man sich nicht kasteien.
Delphi-Quellcode:
sFilename := Format('
%s%s',['
htdocs',ARequestinfo.Document]);
if FileExists(sFilename)
then
begin
Stream:=TFileStream.Create(sFilename, fmOpenRead
or fmShareDenyWrite);
end
else
begin
Stream:=TFileStream.Create('
htdocs/index.html', fmOpenRead
or fmShareDenyWrite);
end;
// Hier muss man noch den ContentType abhängig von dem Dateityp, setzen.
AResponseinfo.ContentType:='
text/html';
AResponseinfo.ContentStream:=Stream;
setlength(Groesse, Stream.Size);
Stream.
Read(Groesse[1], Stream.Size);
Memo1.Lines.Add(datetostr(date) + '
| ' + timetostr(time) + '
: Client ' + ARequestinfo.RemoteIP + '
hat die Datei ' + sFilename + '
(' + inttostr(round(Stream.Size /1024)) + '
kb) angefordert.');
Damit kann man dann auch CSS, Bilder, und was sonst noch so alles auf der Festplatte rumliegt, ausliefern.
CGI-Programme ruft man mit dem TIDCGIRunner im Prinzip in der Form auf:
CGIRunner.Execute(ARequestinfo.Document,AContext,RequestInfo,ResponseInfo,Action);
Ist also auch "nur" ein Einzeiler, geht auch mit .bat, .cmd, .pl für Perl, ..., ist ähnlich simpel wie ShellExecute.
Und ja: Als professionelle Lösung nicht geeignet, aber ist die hier gefordert?