![]() |
TIdHTTPServer : HTML Dokument vor dem versenden bearbeiten
Hallo,
ich habe einen kleinen HTTP-Server mit den Indy's (Version 10):
Delphi-Quellcode:
klappt soweit alles gut, nur möchte ich jetzt aber die angeforderte HTML-Datei vor dem übermitteln bearbeiten, hierbei soll aber nicht die Datei auf der Platte verändert werden, da die Veränderung der Datei für diesen einen User bestimmt ist.
procedure TForm1.IdHTTPServer1CommandGet(AContext: TIdContext;
ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo); var root: String; begin root := ExtractFilePath(ParamStr(0)); AResponseInfo.ContentStream := TFileStream.Create(root + ARequestInfo.Document, fmOpenRead); end; Daher dachte ich an folgendes:
Delphi-Quellcode:
Bei dieser Variante gibt es aber Probleme mit Bilder etc.
procedure TForm1.IdHTTPServer1CommandGet(AContext: TIdContext;
ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo); var root : String; htmlfile: TStrings; begin root := ExtractFilePath(ParamStr(0)); htmlfile := TStringList.Create; try htmlfile.LoadFromFile(root + ARequestInfo.Document); // <-- HTML-Code modifizieren --> AResponseInfo.ContentText := htmlfile.Text; finally htmlfile.Free; end; end; Gibt es eine Möglichkeit den HTML-Source vor dem senden zu bearbeiten oder kann man bei der unteren Variante ein "Arbeitsverzeichniss" festlegen, so das links und Bilder funktionieren ? gruss |
Re: TIdHTTPServer : HTML Dokument vor dem versenden bearbeit
Hi,
event. könnte man zuerst abfragen, was denn der Requester überhaupt gerade haben möchte. Und dann je nachdem, ...wenn er kein HTML haben will, dann lädst du immer ContentStream nach deinem Code oben, ...ansonsten nimmst du den Code unten, zum Laden von ContentText:
Delphi-Quellcode:
if UpperCase(extractFileExt(ARequestInfo.Document)) <> '.HTML'
then "Code-oben" else "Code-unten" |
Re: TIdHTTPServer : HTML Dokument vor dem versenden bearbeit
Er möchte ja immer HTML-Dateien, aber ich möchte vor dem übertragen bestimmten Informationen einfügen.
|
Re: TIdHTTPServer : HTML Dokument vor dem versenden bearbeit
Warum sollte das nach deinem Code unten nicht gehen? Wenn eine Seite vom Server abgerufen wird, dann kommt natürlich zuerst immer die Frage nach dem HTML-Document (welches aber auch immer nur der reine nackte HTML-Code ist, also ohne das wirkliche Bildmaterial, sondern nur mit den Links zu diesen jeweiligen Pics) ...und erst anschließend fragt dann der Requester den Server weiter ab nach jedem einzelnen Picture, das auf dieser HTML-Seite eben noch mit abgebildet wird (z.B. als gif o. jpg). Ergo kannst du beide Code-Teile brauchen und musst immer nur nachzusehen, ob er gerade am Anfang das HTML-Docu haben will oder jeweils dann nachher die Bilder.
(...oder ich muss irgendwie deine Frage nicht richtig verstand haben) |
Re: TIdHTTPServer : HTML Dokument vor dem versenden bearbeit
Ich verstehe irgendwie nicht was du meinst, könntest du mir ein beispiel posten ?
|
Re: TIdHTTPServer : HTML Dokument vor dem versenden bearbeit
Folgende Situation: Man packe einen WebBrowser auf eine Form und gleichzeitig noch einen TIdHTTPServer dazu. Der WebBrowser wird dann also der "Requester" sein und der läd nun seine Seite von diesem TIdHTTPServer auf der gleichen Form, und zwar bei einem Click auf Button1. Das HTML-Document beinhaltet dabei neben irgendeinem Text noch ein Bild. Was passiert also nun im IdHTTPServer1? Es kommen dort insgesamt 2 Anfragen an. Nämlich die erste nach dem eigentlichen HTML-Document, hier mal z.B. 'FAQsHTML0.HTML' genannt, und danach die zweite nach eben diesem Bild darauf!
Wenn du den Beispiel-Code unten mal selbst ausprobieren willst, dann sollte in deinem HTML-Code bezüglich des Bildes noch ungefähr so etwas drinstehen: http://127.0.0.1/BildName.gif
Delphi-Quellcode:
Habe's noch schnell gecheckt und bei mir funzte es.
procedure TFAQ_Form.IdHTTPServer1CommandGet(AContext: TIdContext;
ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo); var htmlfile : TStringList; function doFilename : string; begin result := ExtractFilePath(ParamStr(0)) + copy(ARequestInfo.Document,2,256); end; begin if UpperCase(extractFileExt(ARequestInfo.Document)) <> '.HTML' then begin AResponseInfo.ContentStream := TFileStream.Create(doFilename,fmOpenRead); end else begin htmlfile := TStringList.Create; try htmlfile.LoadFromFile(doFilename); // <-- HTML-Code modifizieren --> AResponseInfo.ContentText := htmlfile.Text; finally htmlfile.Free; end; end; end; procedure TFAQ_Form.Button1Click(Sender: TObject); begin WebBrowser1.Navigate('http://127.0.0.1/FAQsHTML0.HTML'); end; |
Re: TIdHTTPServer : HTML Dokument vor dem versenden bearbeit
Hi,
jetzt hab ich kapiert was du gemeint hast ! Das Beispiel hat mir sehr geholfen. Gibt es auch eine Möglichkeit, dass ich statt:
Code:
[img]http://127.0.0.1:4444/BildName.gif[/img]
Code:
schreiben kann ?
[img]BildName.gif[/img]
|
Re: TIdHTTPServer : HTML Dokument vor dem versenden bearbeit
Ja, nur dieses:
[img]BildName.gif[/img] ...(also ohne eigene Pfadangabe) geht auch, denn wenn kein eigener Pfad dabeisteht, nimmt der Browser zum Requesten ja denjenigen des HTML-Documentes selbst. |
Re: TIdHTTPServer : HTML Dokument vor dem versenden bearbeit
Stimmt funzt !
Hab vorhin beim Testen versehentlich "Bildname" statt "BildName" geschrieben :wall: thx ! |
Re: TIdHTTPServer : HTML Dokument vor dem versenden bearbeit
?, denn der BildFileName, den man dort in den img-Tag einträgt, ist normalerweise nicht CaseSensitiv.
(edit: Ich nehme an, du wirst dich an dieser Stelle event. sonst irgendwie minimal beim BildFileName verschrieben haben, und danach gab es das Bild für den Server natürlich nicht mehr. Der Browser zeigt dann an dessen Stelle ein rotes Keuzchen an. Das ist zwischen Client und Server eher ein alltägliches undramatisches Ereignis, konnte von dir in dieser Situation aber leicht als irgendein anderes Problem interpretiert werden.) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:02 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz