Home » Tipps & Tricks » Netzwerk/Internet » Internet » Dateien mithilfe der Indy über das HTTP-Protokoll downloaden

Dateien mithilfe der Indy über das HTTP-Protokoll downloaden

Um eine Datei über das HTTP-Protokoll übertragen zu können, platzieren Sie die TidHTTP-Komponente auf dem Formular. Für die Übertragung gibt es zwei Versionen der Methode „Get“. Die eine Version gibt den Inhalt einfach als String zurück, sie eignet sich gut für HTML/Text-Dateien:

procedure TForm1.Button1Click(Sender: TObject);
begin
  Memo1.Text:=idHTTP1.Get('http://www.delphi-treff.de');
end;

Die andere Version erwartet als zweiten Parameter einen TStream-Abkömmling. Diese Variante ist besser für den Download von z.B. ZIP-Archiven, PDF-Dateien, JPEGs usw. geeignet:

procedure TForm1.Button1Click(Sender: TObject);
var
 lStream: TFileStream;
begin
 lStream:=TFileStream.Create('C:\Datei.zip', fmCreate or fmShareDenyNone);
 try
   idHTTP1.Get('http://www.delphi-treff.de/Datei.zip', lStream);
 finally
   lStream.Free;
 end;
end;

Sollte der Benutzer ggf. über einen Proxy ins Internet gehen, können entsprechende Einstellungen über die Eigenschaft ProxyParams getätigt werden.Bei der Übertragung von Daten kann es natürlich zu Fehlern kommen. Da gibt es u.a. die aus jedem Browser bekannten HTTP-Fehlern, wie 404 (Datei nicht gefunden), 403 (Zugriff verweigert) oder 500 (Internal Server Error). Mithilfe eines try-except-Blocks können diese Fehler abgefangen werden:

procedure TForm1.Button1Click(Sender: TObject);
begin
 try
   Memo1.Text:=idHTTP1.Get('http://www.delphi-treff.de');
 except
   On E: EIdHTTPProtocolException do
       Showmessage('HTTP-Fehler: '+IntToStr(E.ReplyErrorCode));
   On E: EIdSocketError do
       Showmessage(E.Message);
 end;
end;

Damit die Anwendung bei der Übertragung größerer Dateien nicht einfriert, empfiehlt es sich, zusätzlich die Komponente IdAntiFreeze aufs Formular zu setzen.