datei von urllib2 downloaden

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
bcit6k
User
Beiträge: 77
Registriert: Mittwoch 23. Juli 2008, 08:50

Hallo,

ich rufe mit meinem python script eine url mit php datei auf. Diese php Datei generiert eine PDF Dati, die dann normalerweise an den browser gesendet wird.

wenn ich dei seite mit dem browser öffne kommt die mdelung zum download, bzw. wo ich die pdf datei dann hinspecihern möchte.

wie kann ich das mit urllib2 abfangen? so das ich mit python den datenstream empfangen und abspeichern kann?

danke
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Dann musst du zunächst die URL der Datei bekommen. Wenn du Glück hast, kommst du ganz leicht mit einem HTML-/XML-Parser ran (wirf dazu einen Blick in die Dokumentation). Bei JavaScript dürfte das etwas komplizierter werden.

Jetzt ist nur noch zu klären, was genau du mit "Abfangen" meinst: willst du wirklich die Daten die Geschickt werden (inklusive HTTP-Header, ...), nur die Daten der Datei oder die Datei einfach nur irgendwo speichern?
Das Leben ist wie ein Tennisball.
bcit6k
User
Beiträge: 77
Registriert: Mittwoch 23. Juli 2008, 08:50

hi,

das php script schreibt den header der datei schon. also ich würde wenn ich das im browser aufrufe direkt die datei empfangen, ohne das sich eine website öffnet.

ich möchte einfach die datei die da ausgegeben wird abspeichern, mit dem namen der ihr bereits vergeben wurde.

also z.b.: testfile_1.pdf

mit php schreib ich meinen header so

Code: Alles auswählen

header("Content-type: application/octet-stream;" );
			header('Content-Disposition: attachment; filename="export_testfile_1.pdf"');
			header('Content-Disposition: attachment; filename="export_testfile_1.pdf"');
			header("Pragma: private");
			header('Cache-control: private, must-revalidate');
			print "$header\n$dfw_data";
im grunde müsst ich nur den datenstream in ein file umleiten aber wie? und vor allem wie krieg ich den filename heraus!
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Ich kopiere mal aus der Dokumentation zu urllib2 zum Einlesen einer Seite:

Code: Alles auswählen

>>> import urllib2
>>> req = urllib2.Request(url='https://localhost/cgi-bin/test.cgi')
>>> f = urllib2.urlopen(req)
>>> print f.read()
Wenn du an die Header-Daten möchtest, dann schau dir mal an, was die info-Methode von Request liefert.

Edit: Fast vergessen: vielleicht reicht dir ach schon die Funktion "urllib.urlretrieve" aus.
Das Leben ist wie ein Tennisball.
Antworten