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

Était-ce utile?

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top