2011-01-31 10 views
5

Estoy intentando acceder a una página web desde detrás de cortafuegos de la empresa mediante el siguiente: -sitios web de apertura usando urllib2 desde detrás de cortafuegos corporativo - 11004 getaddrinfo fallaron

password_mgr = urllib2.HTTPPasswordMgrWithDefaultRealm() 
password_mgr.add_password(None, url, username, password) 
auth_handler = urllib2.HTTPBasicAuthHandler(password_mgr) 
opener = urllib2.build_opener(auth_handler) 
urllib2.install_opener(opener) 
conn = urllib2.urlopen('http://python.org') 

error

URLError: <urlopen error [Errno 11004] getaddrinfo failed> 

He tratado con conseguir diferentes manejadores (ProxyHandler probado también de una manera ligeramente diferente), pero parece que no funciona.

¿Alguna pista sobre cuál podría ser el motivo del error y las diferentes formas de proporcionar las credenciales y hacer que funcione?

+0

¿Qué tipo de autenticación que quiere el poder? Si exige 'Proxy-Authenticate: NTLM', entonces es imposible hacer que funcione con Python, lamento decirlo. –

Respuesta

5

Si está utilizando Proxy y ese proxy tiene Nombre de usuario y Contraseña (que tienen muchos proxies corporativos), debe configurar el controlador de proxy con urllib2.

proxy_url = 'http://' + proxy_user + ':' + proxy_password + '@' + proxy_ip 
    proxy_support = urllib2.ProxyHandler({"http":proxy_url}) 
    opener = urllib2.build_opener(proxy_support,urllib2.HTTPHandler) 
    urllib2.install_opener(opener) 

HTTPBasicAuthHandler se utiliza para proporcionar las credenciales para el sitio que se va a acceder y no para ir a través del proxy. El fragmento de arriba podría ayudarte.

+0

Ya había intentado esto, pero dio Http 401 no autorizado como error. Sospecho que mi proxy corporativo es NTLM y los métodos anteriores podrían no ser suficientes. –

+0

Por favor, intente con http://code.google.com/p/python-ntlm/ También intente con la sugerencia en este enlace, http://stackoverflow.com/questions/1481398/python-urllib2-https-and-proxy -ntlm-authentication/1793206 # 1793206 Si ambos funcionan y el urllib2 normal no, entonces presente un informe con bugs.python.org, si no está ya presente. Adivina, necesita ser trabajado. –

+0

python-ntlm no ayudó; dio el mismo error de getaddinfo. Intentaremos pycurl. Muchas gracias por los consejos. –

4

En Windows, observé que python usa la configuración IE Internet Options-> LAN Settings. Entonces, incluso si usamos urllib2 para instalar el abridor y especificamos el proxy_url, continuaría usando la configuración de IE.

funcionó bien, finalmente, cuando Exporté una variable del sistema:

http_proxy=http://userid:[email protected]:port 
+1

llámame tonto pero exportado ¿dónde y cómo? ¿Ejecutó esto en la línea de comandos? Si es así, supongo que usar 'set'? – jamiet

Cuestiones relacionadas