Urllib2 dans Python 2.6.1 prend-il en charge le proxy via https?
Question
urllib2 dans Python 2.6.1 prend-il en charge le proxy via https?
J'ai trouvé ce qui suit à l'adresse http://www.voidspace.org .uk / python / articles / urllib2.shtml :
NOTE
Actuellement, urllib2 ne prend pas en charge récupération des emplacements https via un Procuration. Cela peut être un problème.
J'essaie d'automatiser la connexion au site Web et le téléchargement du document. J'ai un nom d'utilisateur / mot de passe valide.
proxy_info = {
'host':"axxx", # commented out the real data
'port':"1234" # commented out the real data
}
proxy_handler = urllib2.ProxyHandler(
{"http" : "http://%(host)s:%(port)s" % proxy_info})
opener = urllib2.build_opener(proxy_handler,
urllib2.HTTPHandler(debuglevel=1),urllib2.HTTPCookieProcessor())
urllib2.install_opener(opener)
fullurl = 'https://correct.url.to.login.page.com/user=a&pswd=b' # example
req1 = urllib2.Request(url=fullurl, headers=headers)
response = urllib2.urlopen(req1)
Je l'ai utilisé pour des pages similaires, mais sans utiliser HTTPS et je suppose que cela ne passe pas par proxy - il reste bloqué de la même manière que lorsque je ne spécifiais pas de proxy. Je dois sortir par procuration.
Je dois m'authentifier mais sans utiliser l'authentification de base. urllib2 déterminera-t-il l'authentification lors de l'accès via le site https (je fournis un nom d'utilisateur / mot de passe au site via l'URL)?
EDIT: Non, j'ai testé avec
proxies = {
"http" : "http://%(host)s:%(port)s" % proxy_info,
"https" : "https://%(host)s:%(port)s" % proxy_info
}
proxy_handler = urllib2.ProxyHandler(proxies)
Et j'obtiens une erreur:
urllib2.URLError: erreur urlopen [Errno 8] _ssl.c: 480: EOF s'est produit dans violation du protocole
La solution
Je ne suis pas sûr que l'article de Michael Foord, que vous citez, soit mis à jour vers Python 2.6.1 - pourquoi ne pas l'essayer? Au lieu de dire à ProxyHandler que le proxy n’est valable que pour http, comme vous le faites maintenant, enregistrez-le également pour https (vous devez bien entendu le formater en une variable une seule fois avant d’appeler ProxyHandler et de l’utiliser de manière répétée dans la liste déroulante. dict): cela peut ou peut ne pas fonctionner, mais vous n'essayez même pas d'essayer , et c'est sûr de ne pas fonctionner! -)
Autres conseils
Corrigé dans Python 2.6.3 et plusieurs autres branches:
- _bugs.python.org/issue1424152 (remplacez _ par http ...)
-
http://www.python.org/download /releases/2.6.3/NEWS.txt
Problème n ° 1424152: Correctif pour httplib, urllib2 pour prendre en charge SSL tout en passant à travers Procuration. Patch original de Christopher Li, modifications apportées par Senthil Kumaran.
Si quelqu'un d'autre a ce problème à l'avenir, je voudrais souligner qu'il prend désormais en charge le proxy https, assurez-vous qu'il est également pris en charge par le proxy, sinon vous risquez de rencontrer un bogue qui place la bibliothèque python dans une boucle infinie. (cela m'est arrivé).
Pour plus d'informations, consultez l'article le plus à jour dans la source python qui teste la prise en charge du proxy https. http: //svn.python.org/view/python/branches/release26-maint/Lib/test/test_urllib2.py?r1=74203&r2=74202&pathrev=74203