Pregunta

abro URLs con:

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

Y lo que yo quiero hacer es conectar la misma manera con un proxy Yo en algún lugar me hizo decir:

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

pero eso no funcionó bien.

Yo sé urllib2 tiene algo así como un controlador de proxy, pero no puedo recordar esa función.

¿Fue útil?

Solución

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

Otros consejos

Hay que instalar un ProxyHandler

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

Puede configurar servidores proxy usando variables de entorno.

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

urllib2 añadirá automáticamente los controladores de proxy de esta manera. Es necesario configurar proxies para diferentes protocolos separado de lo contrario se producirá un error (en términos de no ir a través de proxy), sigue 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 utilizar los proxies por defecto del sistema (por ejemplo, de la variable de entorno http_support), las siguientes obras para la petición 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 scipt me dio un error

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

solución fue añadir 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 puede utilizar solicitudes si nos gustaría tener acceso a una página web utilizando proxies. Python 3 código:

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

Más de un proxies también se pueden añadir.

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

Además de configurar el proxy para la sesión de línea de comandos Abra una línea de comandos, donde es posible que desee ejecutar la secuencia de comandos

netsh winhttp set proxy YourProxySERVER:yourProxyPORT

ejecutar la secuencia de comandos en ese terminal.

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