AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi ReadTimeout bei Download mit Indy

ReadTimeout bei Download mit Indy

Offene Frage von "Chrissi91"
Ein Thema von Chrissi91 · begonnen am 9. Mär 2008 · letzter Beitrag vom 9. Mär 2008
Antwort Antwort
Chrissi91

Registriert seit: 28. Jul 2005
849 Beiträge
 
#1

ReadTimeout bei Download mit Indy

  Alt 9. Mär 2008, 09:55
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.

Geändert von Daniel (13. Jul 2011 um 20:57 Uhr) Grund: URL auf Wunsch des Autos entfernt.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: ReadTimeout bei Download mit Indy

  Alt 9. Mär 2008, 11:31
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
  Mit Zitat antworten Zitat
Chrissi91

Registriert seit: 28. Jul 2005
849 Beiträge
 
#3

Re: ReadTimeout bei Download mit Indy

  Alt 9. Mär 2008, 11:40
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.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: ReadTimeout bei Download mit Indy

  Alt 9. Mär 2008, 11:50
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.
  Mit Zitat antworten Zitat
Chrissi91

Registriert seit: 28. Jul 2005
849 Beiträge
 
#5

Re: ReadTimeout bei Download mit Indy

  Alt 9. Mär 2008, 12:46
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 ...
  Mit Zitat antworten Zitat
Chrissi91

Registriert seit: 28. Jul 2005
849 Beiträge
 
#6

Re: ReadTimeout bei Download mit Indy

  Alt 9. Mär 2008, 13:37
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. Doppelpost ... Sorry.
  Mit Zitat antworten Zitat
Benutzerbild von Dani
Dani

Registriert seit: 19. Jan 2003
732 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: ReadTimeout bei Download mit Indy

  Alt 9. Mär 2008, 13:54
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 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.
Dani H.
At Least I Can Say I Tried
  Mit Zitat antworten Zitat
Chrissi91

Registriert seit: 28. Jul 2005
849 Beiträge
 
#8

Re: ReadTimeout bei Download mit Indy

  Alt 9. Mär 2008, 14:04
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.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:09 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