Pregunta

¿ urllib2 en Python 2.6.1 admite proxy a través de https?

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

  

NOTA

     

Actualmente urllib2 no es compatible   recuperación de ubicaciones https a través de un   apoderado. Esto puede ser un problema.

Estoy intentando automatizar el inicio de sesión en el sitio web y descargar el documento, tengo un nombre de usuario / contraseña válidos.

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)

Lo he tenido funcionando para páginas similares pero no usando HTTPS y sospecho que no pasa a través del proxy, simplemente se atasca de la misma manera que cuando no especifiqué el proxy. Necesito salir a través del proxy.

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

EDITAR: No, probé con

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

    proxy_handler = urllib2.ProxyHandler(proxies)

Y obtengo un error:

  

urllib2.URLError: error de urlopen   [Errno 8] _ssl.c: 480: EOF ocurrió en   violación del protocolo

¿Fue útil?

Solución

No estoy seguro de que el artículo de Michael Foord, que usted cita, esté actualizado a 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, regístrelo también 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): eso puede o no funcionar, pero ni siquiera lo estás intentando , ¡y eso es seguro de no funcionar! -)

Otros consejos

Corregido en Python 2.6.3 y varias otras ramas:

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

    Problema # 1424152: Solución para httplib, urllib2 para admitir SSL mientras se trabaja apoderado. Parche original de Christopher Li, cambios realizados por Senthil Kumaran.

En caso de que alguien más tenga este problema en el futuro, me gustaría señalar que ahora es compatible con el proxy https, asegúrese de que el proxy también lo admita o corre el riesgo de encontrarse con un error que pone la biblioteca de Python en un bucle infinito (esto me pasó a mí).

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top