2 Stimmen

Die Verwendung von Urlllib2.urlopen schlägt bei binären Daten fehl?

Ich verwende Python, um programmgesteuert eine Zip-Datei von einem Webserver herunterzuladen. Mit einem Webbrowser funktioniert es gut. Ich habe dieses (teilweise) Skript geschrieben;

response = urllib2.urlopen(url, data, 10)
the_page = response.read()
f = open(filename, 'w')
f.write(the_page)
f.close()

Die Anfrage ist erfolgreich und ich erhalte Daten. Das Problem ist, dass die Datei, die ich herunterlade - eine Zip-Datei - nicht funktioniert; die Datei scheint beschädigt zu sein. Sie scheint die richtige Länge zu haben, und im Texteditor sieht sie aus wie der Inhalt einer Zip-Datei. Hier sind die Kopfzeilen des Downloads;

Inhalt-Länge: 9891 Inhalt-Disposition: Content-Disposition:attachment; filename="TrunkBackup_20101230.zip" Date: Wed, 30 Dec 2009 12:22:08 GMT Accept-Ranges: bytes

Wenn ich die Länge der Antwort überprüfe, ist sie mit 9891 korrekt. Ich vermute, dass das Problem darin besteht, dass ich beim Aufruf von response.read() das Ergebnis ist eine Zeichenkette mit "hilfreicher" Normalisierung (z.B., \r a \n ). Wenn ich die Datei schreibe, sind die binären Daten leicht falsch, und die Zip-Datei ist beschädigt.

Mein Problem ist (A) Ich bin nicht sicher, ob ich richtig bin, und (B) wenn ich richtig bin, wie ich die binären Daten selbst zu speichern?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X