Entwickler-Ecke

Internet / Netzwerk - Dateidownload mittels Indy-HTTP


f.stendike - Di 15.07.03 22:48
Titel: Dateidownload mittels Indy-HTTP
Hallo an alle da draussen!

Hab mal ne kurze Frage und auch wenn die Lösung mit Sicherheit ziemlich einfach ist komme ich leider nicht selbst drauf, da ich mich erst richtig in Delphi einarbeite momentan. Also ich habe folgendes Problem: Ich will mittels des Indy Http Clients eine Textdatei von einer URL downloaden. Ich habe dazu auch schon einen Tip im Web gefunden und folgendes kopiert bzw. selbst verändert:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
procedure TForm1.Button9Click(Sender: TObject);
var rs: TFileStream;
begin
  http.Connect;
    try
      rs:=TFileStream.Create('c:\downloaddatei.txt', fmcreate);
      http.Get('Test.txt', rs);
    finally
      rs.free;
    end;
  http.Disconnect;
end;

Am ende des Vorganges erscheint auch die Meldung Connection closed gracefully, aber in der Datei steh nichts drin. Muss man mit dem Stream vielleicht noch irgendwas machen? Ich kenne mich mit Streams noch nicht gut aus, weil ich bisher noch nichts damit gemacht habe.

Vielen Dank für Vorschläge und Lösungen

Moderiert von user profile iconTino: Code- durch Delphi-Tags ersetzt.


Brueggendiek - Di 15.07.03 23:30
Titel: Re: Dateidownload mittels Indy-HTTP
Hallo!


Delphi-Quelltext
1:
http.Get('Test.txt', rs);                    

Wassen dassen fürne URL :?: Unter 'Test.txt' wird sich wohl nichts finden lassen - das soll wohl 'http://www.irgendeinetolledomain.de/Test.txt' heißen! Ansonsten kannst Du ja mal versuchen, ob Dein Browser damit klarkommt - sollte er nicht. Ansonsten sehe ich keine Fehler im Programm

Gruß
Dietmar Brüggendiek


f.stendike - Mi 16.07.03 08:46

Aber die Domain stellet man doch eigentlich unter der Eigenschaft Host des Http Clients ein, oder? Und dann in der Get Anweisung nur den Dateinamen, oder?
Aber das heisst das der FileStream die Daten mit dem Programmcode sofort in die Datei reinschreibt? muss man dem nicht noch ne write Anweisung oder so geben? Oder macht der das von alleine?
Ausserdem noch danke für die schnelle Antwort!


matze - Mi 16.07.03 14:50

also das http connect und disconnect brqauchst du nicht !! es reicht

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
var buffer:tfilestream;
begin
  try
        buffer := tfilestream.create('download.txt',fmCreate or fmShareExclusive);
        try
           idhttp1.Get('http://www.auq.de',buffer);    // Datei wird per GET geladen
   finally
     buffer.free;
   end;

aber noch ein tipp: wenn du den text der textdatei in deinem delphi programm auswerten willst, dann kannst du auch mit

Delphi-Quelltext
1:
string := idthttp1.get ('www.auq.de')                    

dir den inhalt der test datei in einen string geben lassen.


f.stendike - Mi 16.07.03 19:43

Also ich weiss echt nicht, was ich falsch mache, aber es wird immer noch nichts bei mir angezeigt. Am Ende der Übertragung steht zwar immer "Connection closed gracefully", aber im Memo, in dem ich dann den heruntergeladenen String anzeigen möchte, steht nichts. Ich glaube ich mache noch was mit der URL - Angabe falsch. Hier mal mein exakt verwendeter Quellcode:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
procedure TForm1.Button1Click(Sender: TObject);
var 
  s: String;
begin
  s := http.Get('www.meineURL.de/Test.txt');
  memo1.Lines := TStrings(s);
end;

Wenn ich die URL so in den Browser eingebe, erscheint der Text allerdings. Als Host habe ich bei der Komponente nichts angegeben. Lediglich den Port habe ich auf 80 gesetzt. Also noch mal ganz genau: Woran könnte das liegen und was muss ich dort genau als URL eintragen, bei der Eigenschaft Host eintragen und was muss ich für eine URL beim Download als Datei angeben und schreibt der Filestream das sofort in die Datei rein auf der Platte?

Gruss
f.stendike


matze - Mi 16.07.03 20:01

wie heisst denn die URL genau, die du runterladen willst ??? vielleicht hilft uns das weiter


derDoc - Mi 16.07.03 20:12

Zwei Sachen:

1. Die URL benötigt das http:// am Anfang.

2. Ich würde

Delphi-Quelltext
1:
Memo1.Lines.Text := s;                    

benutzen.

Mit diesen beiden Änderungen geht es bei mir.


f.stendike - Mi 16.07.03 22:49

Fragt mich echt nicht, was ich jetzt anders gemacht habe, aber jetzt klappt auf einmal beides, der Download als String und als Datei. Vielen Dank auf jeden Fall für die guten und schnellen Anregungen.


matze - Do 17.07.03 17:59

ja klar. bitte. dafür sind wir ja da !! :-D