2009-07-20 5 views
3

J'essaye d'ajouter le support de proxy authentifiant à un manuscrit existant, car c'est le manuscrit se reliant à un URL de https (avec urllib2.Request et urllib2.urlopen), gratte la page et exécute quelques actions basées sur ce qu'il a trouvé . Initialement, j'avais espéré que ce serait aussi simple que d'ajouter un urllib2.ProxyHandler ({"http": MY_PROXY}) comme argument à urllib2.build_opener qui est à son tour passé à urllib2.install_opener. Malheureusement, cela ne semble pas fonctionner lorsque vous essayez de faire un urllib2.Request (ANY_HTTPS_PAGE). Googler autour me prête à croire que le support de proxy dans urllib2 dans python 2.5 ne supporte pas les URL https. Cela m'a surpris pour le moins.Est-il possible de récupérer une page https via un proxy d'authentification avec urllib2 dans Python 2.5?

Il semble y avoir des solutions flottantes sur le web, par exemple http://bugs.python.org/issue1424152 contient un patch pour urllib2 et httplib qui prétend résoudre le problème (quand je l'ai essayé la question que je commence à obtenir l'erreur suivante à la place: urllib2.URLError: <urlopen error (1, 'error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol')>). Il y a une recette de livre de cuisine ici http://code.activestate.com/recipes/456195 que je prévois d'essayer ensuite. Dans l'ensemble, même si je suis surpris que ce n'est pas pris en charge "hors de la boîte", ce qui me fait me demander si je manque simplement une solution évidente, donc en bref - quelqu'un a une méthode simple pour aller chercher des pages https en utilisant un proxy d'authentification avec urllib2 dans Python 2.5? Idéalement cela fonctionnerait:

import urllib2 
#perhaps the dictionary below needs a corresponding "https" entry? 
#That doesn't seem to work out of the box. 
proxy_handler = urllib2.ProxyHandler({"http": "http://user:[email protected]:port"}) 
urllib2.install_opener(urllib2.build_opener(urllib2.HTTPHandler, 
               urllib2.HTTPSHandler, 
               proxy_handler)) 
request = urllib2.Request(A_HTTPS_URL) 
response = urllib2.urlopen(request) 
print response.read() 

Merci beaucoup

Répondre

1

Vous pouvez regarder dans httplib2. L'une des revendications examples prend en charge les proxys SOCKS si le module socks est installé.

Questions connexes