2010-12-28 5 views
1

ich ein Skript in Python 2.7 zu schreiben, die eine urllib2.OpenerDirector Instanz über urllib2.build_opener() nutzt die Vorteile der urllib2.HTTPCookieProcessor Klasse zu nehmen, weil ich die Cookies ich speichern und erneut senden müssen:Benötigen urllib.urlretrieve und urllib2.OpenerDirector zusammen

Nachdem ich jedoch mehrere Anfragen gestellt und die Cookies verschoben habe, muss ich eventuell eine Liste von URLs abrufen. Ich wollte urllib.urlretrieve() verwenden, weil ich es lese die Datei in Stücke, aber ich kann nicht, weil ich meine Cookies auf die Anfrage tragen muss und urllib.urlretrieve() verwendet eine urllib.URLOpener, die keine Unterstützung für Cookie-Handler wie OpenerDirector hat.

Was ist der Grund für diese seltsame Art, Funktionalität zu spalten, und wie kann ich mein Ziel erreichen?

+0

Nicht direkt verwandt, aber ich mag [pycurl] (http://pycurl.sourceforge.net/) (Wrapper für libcurl), die Cookies und andere Protokolle viel besser behandelt. – Keith

+0

@Keith danke für Ihren Vorschlag. Ich habe gehört, PycURL war schwer zu benutzen, aber vielleicht werde ich es versuchen. – astrojuanlu

Antwort

3

urlretrieve ist eine alte Schnittstelle von urllib. Es war dort, bevor urllib2 entstand. Es hat keine Funktionen zur Sitzungsbehandlung. Es lädt nur die Dateien herunter. Die aktualisierte urllib2 bietet viel besseren Weg mit dem Umgang mit Sitzungen, Kennwörter, Proxies extra mit seiner Handler Schnittstellen OpenerDirector Klasse. Um die URLs einfach als Dateien herunterzuladen, können Sie einfach den urlopen-Aufruf von urllib2 mit demselben Anforderungsobjekt verwenden, das Sie erstellt haben. Dies wird die Sitzung beibehalten.

+0

OK, danke für die Information. Ich muss nun lernen, wie ich den Inhalt der Anfrage in eine Binärdatei speichern kann. – astrojuanlu

+0

Das ist einfach, öffne einfach das Dateiobjekt im "wb" -Modus und was immer du von urlopen() liest.) Lies() schreibe darauf und schließe es. Das ist es. –

+0

Alles klar, vielen Dank! – astrojuanlu