AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi TIdHTTPServer : HTML Dokument vor dem versenden bearbeiten
Thema durchsuchen
Ansicht
Themen-Optionen

TIdHTTPServer : HTML Dokument vor dem versenden bearbeiten

Ein Thema von MrKnogge · begonnen am 23. Jul 2005 · letzter Beitrag vom 24. Jul 2005
Antwort Antwort
MrKnogge

Registriert seit: 9. Jun 2003
Ort: Pforzheim
2.458 Beiträge
 
Delphi 2007 Professional
 
#1

TIdHTTPServer : HTML Dokument vor dem versenden bearbeiten

  Alt 23. Jul 2005, 00:01
Hallo,

ich habe einen kleinen HTTP-Server mit den Indy's (Version 10):

Delphi-Quellcode:
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;
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.


Daher dachte ich an folgendes:

Delphi-Quellcode:
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;
Bei dieser Variante gibt es aber Probleme mit Bilder etc.


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
Christian Bootz
Einstein ist tot, Newton ist tot,
und mir ist auch schon ganz schlecht...
  Mit Zitat antworten Zitat
TStringlist

Registriert seit: 1. Dez 2003
360 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: TIdHTTPServer : HTML Dokument vor dem versenden bearbeit

  Alt 23. Jul 2005, 20:29
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"
MfG (& Thx ggf.)
  Mit Zitat antworten Zitat
MrKnogge

Registriert seit: 9. Jun 2003
Ort: Pforzheim
2.458 Beiträge
 
Delphi 2007 Professional
 
#3

Re: TIdHTTPServer : HTML Dokument vor dem versenden bearbeit

  Alt 23. Jul 2005, 20:37
Er möchte ja immer HTML-Dateien, aber ich möchte vor dem übertragen bestimmten Informationen einfügen.
Christian Bootz
Einstein ist tot, Newton ist tot,
und mir ist auch schon ganz schlecht...
  Mit Zitat antworten Zitat
TStringlist

Registriert seit: 1. Dez 2003
360 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: TIdHTTPServer : HTML Dokument vor dem versenden bearbeit

  Alt 23. Jul 2005, 21:22
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)
MfG (& Thx ggf.)
  Mit Zitat antworten Zitat
MrKnogge

Registriert seit: 9. Jun 2003
Ort: Pforzheim
2.458 Beiträge
 
Delphi 2007 Professional
 
#5

Re: TIdHTTPServer : HTML Dokument vor dem versenden bearbeit

  Alt 23. Jul 2005, 21:48
Ich verstehe irgendwie nicht was du meinst, könntest du mir ein beispiel posten ?
Christian Bootz
Einstein ist tot, Newton ist tot,
und mir ist auch schon ganz schlecht...
  Mit Zitat antworten Zitat
TStringlist

Registriert seit: 1. Dez 2003
360 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: TIdHTTPServer : HTML Dokument vor dem versenden bearbeit

  Alt 23. Jul 2005, 23:08
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:



Delphi-Quellcode:
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)) <> '.HTMLthen 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;
Habe's noch schnell gecheckt und bei mir funzte es.
MfG (& Thx ggf.)
  Mit Zitat antworten Zitat
MrKnogge

Registriert seit: 9. Jun 2003
Ort: Pforzheim
2.458 Beiträge
 
Delphi 2007 Professional
 
#7

Re: TIdHTTPServer : HTML Dokument vor dem versenden bearbeit

  Alt 24. Jul 2005, 00:02
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:
[img]BildName.gif[/img]
schreiben kann ?
Christian Bootz
Einstein ist tot, Newton ist tot,
und mir ist auch schon ganz schlecht...
  Mit Zitat antworten Zitat
TStringlist

Registriert seit: 1. Dez 2003
360 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: TIdHTTPServer : HTML Dokument vor dem versenden bearbeit

  Alt 24. Jul 2005, 00:47
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.
MfG (& Thx ggf.)
  Mit Zitat antworten Zitat
MrKnogge

Registriert seit: 9. Jun 2003
Ort: Pforzheim
2.458 Beiträge
 
Delphi 2007 Professional
 
#9

Re: TIdHTTPServer : HTML Dokument vor dem versenden bearbeit

  Alt 24. Jul 2005, 00:52
Stimmt funzt !

Hab vorhin beim Testen versehentlich "Bildname" statt "BildName" geschrieben

thx !
Christian Bootz
Einstein ist tot, Newton ist tot,
und mir ist auch schon ganz schlecht...
  Mit Zitat antworten Zitat
TStringlist

Registriert seit: 1. Dez 2003
360 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: TIdHTTPServer : HTML Dokument vor dem versenden bearbeit

  Alt 24. Jul 2005, 01:05
?, 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.)
MfG (& Thx ggf.)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:29 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz