2009-06-23 10 views
6

¿Tiene urllib2 en Python 2.6.1 proxy de soporte a través de https?¿Urllib2 en el proxy de soporte de Python 2.6.1 a través de https

que he encontrado lo siguiente en http://www.voidspace.org.uk/python/articles/urllib2.shtml:

NOTE

Currently urllib2 does not support fetching of https locations through a proxy. This can be a problem.

estoy tratando de automatizar inicio de sesión en el sitio web y la descarga de documentos, tengo válida nombre de usuario/contraseña.

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) 

que he tenido que trabajar para páginas similares, pero no a través de HTTPS y sospecho que no consigue a través de proxy - sólo se queda atascado en la misma forma que cuando no se hayan indicado proxy. Necesito salir a través del proxy.

Necesito autenticar pero no usar la autenticación básica, ¿urllib2 descubrirá la autenticación al pasar por el sitio https (proporciono el nombre de usuario/contraseña al sitio a través de la URL)?

EDIT: No, he probado con

proxies = { 
     "http" : "http://%(host)s:%(port)s" % proxy_info, 
     "https" : "https://%(host)s:%(port)s" % proxy_info 
    } 

    proxy_handler = urllib2.ProxyHandler(proxies) 

Y consigo error:

urllib2.URLError: urlopen error [Errno 8] _ssl.c:480: EOF occurred in violation of protocol

Respuesta

3

no estoy seguro de artículo de Michael Foord, que se cita, se actualiza para Python 2.6. 1 - ¿por qué no intentarlo? En lugar de decirle a ProxyHandler que el proxy solo es bueno para http, como lo está haciendo ahora, también debe registrarlo para https (por supuesto, debe formatearlo en una variable solo una vez antes de llamar a ProxyHandler y simplemente usar esa variable repetidamente en el dict): que puede o no puede trabajar, pero, ni siquiera estás tratando , y eso es seguro no trabajar -)

+0

Aaah, lo tengo :) me dejó probar (por cierto que he descubierto lo que necesitaba con curl pero todavía sería agradable tener que correr en python) – stefanB

+0

añadiendo Desafortunadamente el proxy como la clave 'https' en el dict que pase a ProxyHandler no se solucionará el problema ya que AFAIK no admite el método CONNECT HTTP. Usar PyCurl es la solución más fácil, pero para distribuir código, la falta de soporte de Windows en PyCurl (o al menos la facilidad de instalación) puede ser un gran obstáculo. – Tom

3

en caso que cualquier otra persona tener este problema en el futuro me gustaría! señale que sí es compatible con https proxying ahora, asegúrese de que el proxy también lo admite o corre el riesgo de encontrarse con un error que coloca la biblioteca de Python en un bucle infinito (esto me pasó a mí).

Véase el unittest en la fuente de Python que está probando https de proxies de soporte para más información: http://svn.python.org/view/python/branches/release26-maint/Lib/test/test_urllib2.py?r1=74203&r2=74202&pathrev=74203

+0

+1 gracias por la información – stefanB

+0

+1 para vincular a una prueba de unidad en la fuente python – charmoniumQ

6

fijo en Python 2.6.3 y varias otras ramas:

  • _bugs. python.org/issue1424152 (replace _ with http ...)
  • http://www.python.org/download/releases/2.6.3/NEWS.txt

    Problema n.º 1424152: solución para httplib, urllib2 para admitir SSL mientras se trabaja a través del proxy . Parche original de Christopher Li, cambios realizados por Senthil Kumaran.

+0

+1 gracias por la información – stefanB

Cuestiones relacionadas