Proxy con urllib2

Abro urls con:

site = urllib2.urlopen('http://google.com')

Y lo que quiero hacer es conectarme de la misma manera con un proxy que obtuve en algún lugar y me dice:

site = urllib2.urlopen('http://google.com', proxies={'http':'127.0.0.1'})

pero eso tampoco funcionó.

Sé que urllib2 tiene algo como un controlador de proxy, pero no puedo recordar esa función.

 proxy = urllib2.ProxyHandler({'http': '127.0.0.1'}) opener = urllib2.build_opener(proxy) urllib2.install_opener(opener) urllib2.urlopen('http://www.google.com') 

Tienes que instalar un ProxyHandler

 urllib2.install_opener( urllib2.build_opener( urllib2.ProxyHandler({'http': '127.0.0.1'}) ) ) urllib2.urlopen('http://www.google.com') 

Puede establecer proxies utilizando variables de entorno.

 import os os.environ['http_proxy'] = '127.0.0.1' os.environ['https_proxy'] = '127.0.0.1' 

urllib2 agregará controladores de proxy automáticamente de esta manera. Debe configurar los proxies para diferentes protocolos por separado, de lo contrario fallarán (en términos de no pasar por el proxy), vea a continuación.

Por ejemplo:

 proxy = urllib2.ProxyHandler({'http': '127.0.0.1'}) opener = urllib2.build_opener(proxy) urllib2.install_opener(opener) urllib2.urlopen('http://www.google.com') # next line will fail (will not go through the proxy) (https) urllib2.urlopen('https://www.google.com') 

En lugar

 proxy = urllib2.ProxyHandler({ 'http': '127.0.0.1', 'https': '127.0.0.1' }) opener = urllib2.build_opener(proxy) urllib2.install_opener(opener) # this way both http and https requests go through the proxy urllib2.urlopen('http://www.google.com') urllib2.urlopen('https://www.google.com') 

Para usar los servidores proxy predeterminados (por ejemplo, de la variable de entorno http_support), lo siguiente funciona para la solicitud actual (sin instalarlo en urllib2 globalmente):

 url = 'http://www.example.com/' proxy = urllib2.ProxyHandler() opener = urllib2.build_opener(proxy) in_ = opener.open(url) in_.read() 

Además de la respuesta aceptada: mi recibo me dio un error

 File "c:\Python23\lib\urllib2.py", line 580, in proxy_open if '@' in host: TypeError: iterable argument required 

La solución fue agregar http: // delante de la cadena de proxy:

 proxy = urllib2.ProxyHandler({'http': 'http://proxy.xy.z:8080'}) opener = urllib2.build_opener(proxy) urllib2.install_opener(opener) urllib2.urlopen('http://www.google.com') 

También se pueden usar solicitudes si nos gustaría acceder a una página web utilizando proxies. Código de Python 3:

 >>> import requests >>> url = 'http://www.google.com' >>> proxy = '169.50.87.252:80' >>> requests.get(url, proxies={"http":proxy})  

También se pueden agregar más de un proxy.

 >>> proxy1 = '169.50.87.252:80' >>> proxy2 = '89.34.97.132:8080' >>> requests.get(url, proxies={"http":proxy1,"http":proxy2})  

Además, configure el proxy para la sesión de la línea de comandos Abra una línea de comandos donde desee ejecutar su script

 netsh winhttp set proxy YourProxySERVER:yourProxyPORT 

ejecuta tu script en ese terminal.