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.