Dateien mithilfe der Indy über das HTTP-Protokoll downloaden |
|
| System | Win9x, WinNT, Win2000, WinXP, Vista, Win7 |
|---|---|
| Ab Delphi-Version | Delphi 1 |
| Letzte Änderung | 28.09.2010 |
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.