Tech-Ecke / Delphi Inhalt / IdHTTP Komponente

 

     IdHTTP Komponente (Internet)

 

   Vorab

Die Indy-Komponentensammlung bietet zahlreiche Komponenten rund ums Internet, von HTTP über FTP bis hin zu POP3 und SMTP. Die hier gezeigten Codeschnipsel wurden für die Version 10.0.52 erstellt, sollten aber auch für andere Versionen gültig sein. Bei neueren Delphi-Versionen ist diese Komponentensammlung bereits enthalten, bei älteren Versionen kann man das Paket aber auch kostenlos im Internet bei indyproject downladen. Wie externe Komponenten eingebunden werden steht hier.

   HTTP- Internetzugriff (HTML-Code laden)

Der Zugriff via HTTP-Protokoll  gestaltet sich völlig unspektakulär. Komponente IdHTTP auf die Form ziehen und schon geht's los.

HTML-Code von "http" in ein String oder TMemo laden.   (var s:String)

  s :=  IdHttp1.Get('http://www.seite.de');

Memo1.Text := IdHttp1.Get('http://www.seite.de');
 

HTML-Code von "https" in eine TMemo laden

+

Beim HTTPS-Protokoll muss zur idHTTP Komponente auch noch die idSSLIOHandlerSocketOpenSSL auf die Form gezogen werden.
Dann muss im Opjektinspektor bei der idHTTP unter IOHandler die idSSLIOHandlerSocketOpenSSL angegeben werden.
Zu guter Letzt benötigt man noch die beiden OpenSSL-DLL's: libeay32.dll und ssleay32.dll. diese bekommt man z.B. hier: https://github.com. Beide DLL's müssen sich im gleichen Verzeichnis der erstellen Anwendung befinden.

Und schon kann sie los gehen, die wilde Fahrt:   (var s:String)

  s := IdHttp1.Get('https://www.tech-ecke.de');

Memo1.Text := IdHttp1.Get('https://www.tech-ecke.de');
 

Herunterladen einer Datei:

Das Beispiel hier bezieht sich auf Webseiten mit HTTP-Protokoll. Bei HTTPS ist analog dem oben gezeigten Beispiel zum Laden des HTML-Codes vorzugehen.

  var
     DateiStream:TFileStream;

DateiStream:=TFilestream.create('C:\ZielDatei.exe', fmcreate);  // Zielpfad und Ziehl-Dateiname
try
   idhttp1.Get('http://tech-ecke.de/programme/VDOpener.exe', DateiStream);   // Datei in Stream laden
   DateiStream.free
except
   on E: Exception do Application.MessageBox (PChar(E.Message),'Verbindungsfehler!',MB_OK);
end;

// mach was mit dem DateiStream

 

   Progressbar

Für eine Fortschrittsanzeige nutzt man die drei Ereignisse OnWorkBegin, OnWork und OnWorkEnd .

1) OnWorkBegin

Bei OnWorkBegin übergibt man die Dateigröße als Integer der Progressbar als maximale Position.

   ProgressBar1.Max := AWorkCountMax;
 

2) OnWork

Bei OnWork wird der aktuelle Fortschritt des Down bzw. Uploads als Integer übergeben

   ProgressBar1.Position := AWorkCount;
 Application.ProcessMessages;
 

3) OnWorkEnd

Bei OnWorkEnd wird die Prgressbar wieder auf null gesetzt

   ProgressBar1.Position := 0;
 

   AntiFreeze

Wenn eine Indy-Komponenten aktiv im Internet ist, also wenn man z.B. über den FTP-Client Daten herunter- oder hochläd, dann "gefriert" das Fenster der Anwendung Anwendung ein und lässt sich nicht mehr bewegen oder aktualisieren, was sich bei Verwendung einer Progressbar denkbar ungünstig verhalten würde. Um diesen, wohl oft unerwünschten Effekt zu unterdrücken dient die Komponente AntiFreeze. Die Komponenten wird einfach auf die Form gezogen und im Objektinspektor die Eigenschaft OnlyWhenIdle auf False gesetzt, und gut is.

Die Option Drucken funktioniert erst ab Netscape V4.0 bzw. I-Explorer 5.0 !

[letzte Aktualisierung 07.01.2012]