Hallo,
ich möchte mich zunächst erklären, weil häufig der Vorwurf kommt, man würde Spam-Bots oder ähnliches programmieren, wenn man eine Frage wie ich stellt. Ich habe hier eine TK-Anlage, die im Netz erreichbar ist und eine
html-Oberfläche zur Verfügung stellt. In/mit dieser werden unter anderem auch Faxe als tif-Dateien abgerufen. Für letzteres eignet sich hervorragend die Funktion TDownLoadURL().
Um aber herauszufinden, ob und wo (
URL) neue Faxe da sind, muss ich den
html-Code der Seite auswerten und zuvor natürlich auslesen. Im Moment mache ich das so:
Delphi-Quellcode:
Uses
Classes,
// für TStringStream
Forms,
// für TApplication
SHDocVw,
// für TWebBrowser
ActiveX;
// für IStream und IPersistStreamInit
Function GetHTMLCode(
Const URL: WideString):
String;
Var
WB : TWebBrowser;
sa : IStream;
ss : TStringStream;
ps : IPersistStreamInit;
Begin
Result:='
';
WB:=TWebBrowser.Create(
nil);
Try
WB.Navigate(
URL);
While (WB.ReadyState < 3)
Do
Application.ProcessMessages;
If Assigned(WB.Document)
Then
Begin
ss:=TStringStream.Create('
');
Try
ps:=(WB.Document
As IPersistStreamInit);
sa:=TStreamAdapter.Create(ss, soReference)
As IStream;
If Succeeded(ps.Save(sa, True))
Then
Result:=ss.DataString;
Finally
ss.Free;
End;
End;
Finally
WB.Free;
End;
End;
Mich stört aber, dass dieser Code
das Gegenteil von resourceschonend ist und neben CPU-Last auch unheimlich
RAM verbraucht. Ich habe bei meinen Recherchen schon die Indys als mögliche Alternative ausgemacht. Allerdings kann ich die unter TurboDelphi nicht installieren. Ich könnte Komponenten ggf. zwar zur Laufzeit erzeugen. Allerdings wüsste ich zunächst nicht, in welcher
Unit ich suchen muss und vielleicht ist das auch mit Kanonen auf Spatzen schießen.
Gibt es eine Möglichkeit, den html-Code einer Webseite auch ohne TWebBrowser und ohne Indys abzufragen?
Ich vermute dies, weil TDownLoadURL() vergleichsweise schlank daherkommt. Ich bin aber daran gescheitert, den entsprechenden Code für mein Problem nutzbar zu machen. Ich finde es auch wenig elegant, den
html-Code zunächst als Datei zu speichern und dann wieder zu laden etc. pp.
Gruß, Alex