Seite 1 von 1
Wiederaufnahme abgebrochener Downloads?
Verfasst: Samstag 25. September 2010, 14:09
von .:TBX:.
Wie kann man das bewerkstelligen?
Habe auch keine Idee dafür. :K
Hat jemand evt. schon soetwas gemacht oder wo finde ich darüber Informationen?
Tante Google spuckt da nicht viel aus.

Re: Wiederaufnahme Abgebrochener Download´s ??
Verfasst: Samstag 25. September 2010, 14:14
von BlackJack
@.:TBX:.: Das kommt auf's Protokoll drauf an und ob der Server es unterstützt. Die Details sind in den RFCs zu den Protokollen zu finden.
Re: Wiederaufnahme Abgebrochener Download´s ??
Verfasst: Samstag 25. September 2010, 16:34
von .:TBX:.
Gesetz dem Fall es wird unterstützt.

(bin mir aber ned sicher)
Muß dann ja von dem File was auf Platte ist die größe bestimmen. (kleinste Übel

)
Dann die DL Adr. aufrufen und nochmal laden ???
Geht ja ned weil das File ja dann überschrieben wird.
Also fehlt da nochwas zwischen. Aus den RFC werd ich ned so recht schlau.

Re: Wiederaufnahme Abgebrochener Download´s ??
Verfasst: Sonntag 26. September 2010, 07:33
von Leonidas
Also wenns um HTTP geht, dann kennt HTTP auch den Header Content-Range, da kannst du angeben ab wo du die Datei lesen willst.
Re: Wiederaufnahme Abgebrochener Download´s ??
Verfasst: Sonntag 26. September 2010, 18:29
von Dauerbaustelle
Leonidas hat geschrieben:Content-Range
`Content-Range` ist, das was vom Server zurückkommt. Der Client schickt `Range`. Hier mal ein Exempel:
Code: Alles auswählen
import urllib2
RELATIVE_TO_END = 2
url = 'http://cdimage.ubuntu.com/daily/20100925/maverick-alternate-amd64.template'
dest = open('blah', 'a')
dest.seek(0, RELATIVE_TO_END)
already_received = dest.tell()
try:
req = urllib2.Request(url)
req.add_header('Range', 'bytes=%d-' % already_received)
sock = urllib2.urlopen(req)
while True:
data = sock.read(8*1024)
if not data:
break
dest.write(data)
read_bytes += len(data)
finally:
sock.close()
dest.close()
Kannste ja mal ausprobieren, einfach das Programm ab und zu mal unterbrechen und neu starten. Der Download wird korrekt fortgesetzt.
Re: Wiederaufnahme Abgebrochener Download´s ??
Verfasst: Montag 27. September 2010, 07:51
von snafu
Aus welchem Grund gehst du den Weg über `seek()` und `tell()`? Gibt das hier andere Ergebnisse als `os.path.getsize()`?
Re: Wiederaufnahme Abgebrochener Download´s ??
Verfasst: Montag 27. September 2010, 13:33
von lunar
@snafu: Andere Ergebnisse wohl nicht, aber öffnen muss man die Zieldatei ja sowieso, also kann man mit ".tell()" einen "stat()"-Aufruf sparen.
"a" ist allerdings nicht nötig, da sowieso zum Ende gesprungen wird. Außerdem muss die Datei binär geöffnet werden, "wb" wäre also der richtige Modus. Die Schleife zum Kopieren der Bytes kann man mit "iter()" eleganter und ohne Endlosschleife formulieren, oder am besten gleich vollständig durch "shutil.copyfileobj" ersetzen. Zum Schluss natürlich noch der obligatorisch Hinweis auf "with", vor allem, da der Quelltext in dieser Form einen UnboundLocalError wirft, wenn das Öffnen der URL fehlschlägt.
Direkt übernehmen sollte man den Quelltext daher nicht.
Re: Wiederaufnahme abgebrochener Downloads?
Verfasst: Montag 27. September 2010, 13:52
von Dauerbaustelle
War ja auch nur eine Gedankennotiz. Ich dachte allerdings, dass "w" die Datei stets überschreibt.
Re: Wiederaufnahme abgebrochener Downloads?
Verfasst: Montag 27. September 2010, 13:59
von lunar
Stimmt, daran habe ich gar nicht gedacht. Mein Fehler ...
