Einzelnen Beitrag anzeigen

Schwedenbitter

Registriert seit: 22. Mär 2003
Ort: Finsterwalde
622 Beiträge
 
Turbo Delphi für Win32
 
#1

HTML einer URL ohne TWebBrowser und Indys

  Alt 15. Nov 2010, 15:34
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
Alex Winzer
  Mit Zitat antworten Zitat