Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi ReadTimeout bei Download mit Indy (https://www.delphipraxis.net/109864-readtimeout-bei-download-mit-indy.html)

Chrissi91 9. Mär 2008 09:55


ReadTimeout bei Download mit Indy
 
Ich habe mit den Indy 9 ein Problem. Ich lade mit folgendem Code eine Datei aus dem Internet herunter und packe sie auf den Desktop:

Delphi-Quellcode:
var
  lStream: TFileStream;
Delphi-Quellcode:
HTTP.ReadTimeout := 5000; //Das sollte angeblich in einem Thread mit ähnlichem Problem helfen, war aber vergebens
HTTP.Head(URL_From);
lStream := TFileStream.Create(URL_To, fmCreate or fmShareDenyNone);
Try
  HTTP.Get(URL_From, lStream);
Finally
  If Assigned(lStream) then lStream.Free;
end;
URL_From: *irgendeine URL*
URL_To: *irgendein lokaler Pfad*

Jedes mal kommt ein Read Timeout und manchmal schmettern Vista noch dazwischen, dass auf die Datei nicht zugegriffen werden kann, weil eventuell ein anderer Prozess auf sie zugreift. Aber mehr als da im Code steht, mache ich auch nicht mit der Datei.

marabu 9. Mär 2008 11:31

Re: ReadTimeout bei Download mit Indy
 
Hallo Christopher,

du kannst die Datei auch in mehreren Stücken laden. Das sieht vom Prinzip her dann ungefähr so aus:

Delphi-Quellcode:
function HTTPDownload(const url, fn: string): Boolean;
var
  s: TStream;
  http: TIdHTTP;
begin
  http := TIdHTTP.Create(nil);
  try
    if FileExists(fn)
      then s := TFileStream.Create(fn, fmOpenReadWrite or fmShareDenyWrite)
      else s := TFileStream.Create(fn, fmCreate);
    http.Request.ContentRangeStart := s.Size;
    http.Request.ContentRangeEnd := Pred(http.Response.ContentLength);
    http.Get(url, s);
  finally
    http.Free;
    s.Free;
  end;
end;
Grüße vom marabu

Chrissi91 9. Mär 2008 11:40

Re: ReadTimeout bei Download mit Indy
 
Ja, danke. Aber ich verstehe nicht, was mir Delphi damit sagen will. Wo liegt das Problem? Die Datei ist gerade mal 600 kb groß.

Ich weich auch gerna auf andere Alternativen aus, mich interessiert aber, warum er das nicht machen will.

marabu 9. Mär 2008 11:50

Re: ReadTimeout bei Download mit Indy
 
Falls ein Größenproblem vorliegt, dann nicht auf der Client-Seite. Beachte aber, dass du eventuell Redirects zulassen musst.

Genaueres kannst du dir im FireFox anschauen, wenn du das Add-On "Live HTTP Headers" installiert hast.

Chrissi91 9. Mär 2008 12:46

Re: ReadTimeout bei Download mit Indy
 
Deine Idee hat leider nicht geklappt. Was meinst du mit redirects? Ich google mal, ob ich dann verstehe was du damit meinst. :p

Ich finde redirect nur als "Weiterleitung". Was hat das mit Dateidownloads zu tun. Wenn das gleich nicht klappt, nenn ich die exe auf dem Server in txt um, les die Seite ein, speicher sie als Textdatei und benennen sie wieder in eine EXE um. Nicht elegant, klappt aber ...

Chrissi91 9. Mär 2008 13:37

Re: ReadTimeout bei Download mit Indy
 
Ich glaube ich habe den Fehler gefunden. Dazu habe ich mal eine grundlegende Frage.

Mit meiner KomponenteHTTP von idHTTP auf der Form ging es nicht. Ich hatte sie schon vorher mal benutzt. Wenn ich eine 2 raufmache namens HTTP2 klappt es. Muss ich nach einer Get oder Post-Abfrage mit der Komponente irgendwas machen? Sie zurücksetzen oder so? .Free geht ja schlecht. Ich hab sie ja auf der Form und will sie mehrmals benutzen.

Edit: Verdammt. :wall: Doppelpost ... Sorry. :oops:

Dani 9. Mär 2008 13:54

Re: ReadTimeout bei Download mit Indy
 
Zitat:

Zitat von Chrissi91
Muss ich nach einer Get oder Post-Abfrage mit der Komponente irgendwas machen? Sie zurücksetzen oder so? .Free geht ja schlecht. Ich hab sie ja auf der Form und will sie mehrmals benutzen.

Meine Erfahrung mit den Indies ist, dass es sich um Wegwerfkomponenten handelt. Also einmal benutzen, dann freigeben und neu erstellen und initialisieren :mrgreen: Speziell der TCPClient scheint sich nach einem Disconnect oft nicht wieder im gleichen Zustand wie vor dem Connect zu befinden. Vielleicht müsste man einfach nur die Lesepuffer manuell leeren oder so... habe nie rausgefunden, woran das liegt.

Chrissi91 9. Mär 2008 14:04

Re: ReadTimeout bei Download mit Indy
 
Ich hab alle von der Form genommen, HTTP als TidHTTP dklariert. Jetzt mach ich immer:

Create.
Get-Abfrage
Free

Create.
Get-Abfrage
Free

Create.
Get-Abfrage
Free

Create.
Get-Abfrage
Free

Create.
Get-Abfrage
Free

Create.
Get-Abfrage
Free

Und das alle 5 Sekunden. :mrgreen:


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:22 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz