Usando un HTTP PROXY – Python

Estoy familiarizado con el hecho de que debería establecer la variable de entorno HTTP_RPOXY en la dirección proxy.

En general, urllib funciona bien, el problema es tratar con urllib2.

>>> urllib2.urlopen("http://www.google.com").read() 

devoluciones

 urllib2.URLError:  

o

 urllib2.URLError:  

Información extra:

urllib.urlopen (….) funciona bien! Es solo urllib2 que está jugando trucos …

Intenté la respuesta de @Fenikso pero ahora recibo este error:

 URLError:  

¿Algunas ideas?

Puedes hacerlo incluso sin la variable de entorno HTTP_PROXY. Prueba esta muestra:

 import urllib2 proxy_support = urllib2.ProxyHandler({"http":"http://61.233.25.166:80"}) opener = urllib2.build_opener(proxy_support) urllib2.install_opener(opener) html = urllib2.urlopen("http://www.google.com").read() print html 

En su caso, realmente parece que el servidor proxy está rechazando la conexión.


Algo más para probar:

 import urllib2 #proxy = "61.233.25.166:80" proxy = "YOUR_PROXY_GOES_HERE" proxies = {"http":"http://%s" % proxy} url = "http://www.google.com/search?q=test" headers={'User-agent' : 'Mozilla/5.0'} proxy_support = urllib2.ProxyHandler(proxies) opener = urllib2.build_opener(proxy_support, urllib2.HTTPHandler(debuglevel=1)) urllib2.install_opener(opener) req = urllib2.Request(url, None, headers) html = urllib2.urlopen(req).read() print html 

Edición 2014: Esta parece ser una pregunta / respuesta popular. Sin embargo hoy en día usaría el módulo de requests terceros en su lugar.

Para una solicitud solo haz:

 import requests r = requests.get("http://www.google.com", proxies={"http": "http://61.233.25.166:80"}) print(r.text) 

Para solicitudes múltiples, use el objeto Session para que no tenga que agregar el parámetro proxies en todas sus solicitudes:

 import requests s = requests.Session() s.proxies = {"http": "http://61.233.25.166:80"} r = s.get("http://www.google.com") print(r.text) 

Te recomiendo que solo utilices el módulo de peticiones.

Es mucho más fácil que los clientes http integrados: http://docs.python-requests.org/en/latest/index.html

Uso de la muestra:

 r = requests.get('http://www.thepage.com', proxies={"http":"http://myproxy:3129"}) thedata = r.content 

Solo quiero mencionar que también es posible que tenga que configurar la variable de entorno del sistema operativo https_proxy en caso de que deba acceder a las URL de https. En mi caso, no era obvio para mí e intenté descubrirlo durante horas.

Mi caso de uso: Win 7, jython-standalone-2.5.3.jar, setuptools la instalación a través de ez_setup.py

Python 3:

 import urllib.request htmlsource = urllib.request.FancyURLopener({"http":"http://127.0.0.1:8080"}).open(url).read().decode("utf-8") 

Encontré esto en el cliente jython.
El servidor solo hablaba TLS y el cliente utilizaba el contexto ssl javax.net.ssl.SSLContext.getInstance (“SSL”)

Una vez que el cliente estaba en TLS, las cosas empezaron a funcionar.