Home » Tutorials » Netzwerk und Internet » Indy

Indy

HTTP (TIdHTTP)

HTTP allgemein

Das Hypertext Transfer Protocol (HTTP) ist das Kommunikationsprotokoll im World Wide Web (WWW). Will ein Benutzer eine Webseite in seinem Browser sehen, gibt er den URL (Uniform Resource Locator) in die Adresszeile ein, der Browser erzeugt einen entsprechenden HTTP-Request, der im Klartext über TCP/IP an den zuständigen Webserver übertragen wird. Der Server quittiert den Empfang mit einem Statuscode (z.B. 200 für „OK“, 404 für „Seite nicht gefunden“) und schickt die angeforderte Datei an den Browser zurück. HTTP ist nicht verbindungsorientiert, d.h. nach jedem Request wird die Verbindung zwischen Client und Server wieder getrennt. Ruft ein Client eine weitere Datei ab, weiß der Webserver nicht mehr, ob der gleiche Client bereits andere Dateien angefordert hatte. Das ist besonders bei Webanwendungen wie Shops oder E-Mail-Diensten sehr ungünstig, weshalb in solchen Fällen mit Cookies oder Sessions gearbeitet wird, um HTTP zu überlisten. Ein weiterer Nachteil ist die Klartextübertragung aller Daten (auch von Passwörtern). Deshalb wurden Verbesserungen wie SSL entwickelt. Um SSL einsetzen zu können, enthält die Indy-Sammlung die Komponente TIdConnectionInterceptOpenSSL, auf die hier jedoch nicht näher eingegangen werden soll.
Siehe auch

IdHTTP

Diesmal entwickeln wir eine kleine Anwendung, die es zum Ziel hat, eine bestimmte Datei aus dem Internet herunterzuladen.

Das Fenster enthält zwei Eingabefelder: eins für die komplette URL der Datei, die heruntergeladen werden soll, und eins für den Namen, den die Datei dann auf der lokalen Platte bekommen soll. Außerdem gibt es ein Label, das nach Ausführung der Aktion den HTTP-Status-Code ausgibt (z.B. 200 für OK oder 404 für nicht gefunden).
Klick der Anwender auf „Get!“, wird folgender Code ausgeführt:

procedure TForm1.btnGetClick(Sender: TObject);
var ResponseStream: TFileStream;
begin
  ResponseStream := TFileStream.Create(edFile.Text, fmCreate);
  try
    IdHTTP1.Get(edUrl.Text, ResponseStream);
    lbStatus.Caption := 'HTTP-Status: ' + IntToStr(IdHTTP1.ResponseCode);
  finally
    ResponseStream.Free;
  end;
  ShowMessage('Download abgeschlossen');
end;

Die Methode Get der IdHTTP-Komponente liefert ihr Ergebnis (also den Dateiinhalt) in einen Stream zurück. Deshalb muss zunächst ein TFileStream-Objekt erzeugt werden. Dabei werden Dateiname und Öffnungsmodus (nur lesen, nur schreiben, neu erzeugen usw.) angegeben. Mögliche Werte sind unter TFileStream.Create in der Delphi-Hilfe aufgelistet und erklärt.
Dies ist die einfachste Art, die HTTP-Komponente zu nutzen. Wer sich mit HTTP auskennt, kann jedoch seinen eigenen HTTP-Header erstellen (über den bei Browsern z.B. auch Name und Version des Browsers sowie Name und Version des Betriebssystems an den Server geschickt werden, was der Website-Betreiber dann in seinem Logfile findet) und ihn an einen Server schicken.

Beispielprogramm