2010-07-02 14 views
15

que tienen este programa que comprobar un sitio web, y yo quiero saber cómo puedo comprobarlo a través de proxy en Python ...¿Cómo puedo abrir un sitio web con urllib vía proxy en Python?

este es el código, sólo por ejemplo

while True: 
    try: 
     h = urllib.urlopen(website) 
     break 
    except: 
     print '['+time.strftime('%Y/%m/%d %H:%M:%S')+'] '+'ERROR. Trying again in a few seconds...' 
     time.sleep(5) 
+0

urllib2 http://stackoverflow.com/questions/1450132/proxy-with-urllib2 –

Respuesta

29

Por defecto, urlopen utiliza la variable de entorno para determinar qué http_proxy proxy HTTP para utilizar:

$ export http_proxy='http://myproxy.example.com:1234' 
$ python myscript.py # Using http://myproxy.example.com:1234 as a proxy 

Si por el contrario desea especificar un proxy dentro de su aplicación, se puede dar una ar proxies gument a urlopen:

proxies = {'http': 'http://myproxy.example.com:1234'} 
print "Using HTTP proxy %s" % proxies['http'] 
urllib.urlopen("http://www.google.com", proxies=proxies) 

Editar: Si entiendo correctamente sus comentarios, quieres probar varios proxies e imprimir cada proxy como lo intentas. ¿Qué tal algo como esto?

candidate_proxies = ['http://proxy1.example.com:1234', 
        'http://proxy2.example.com:1234', 
        'http://proxy3.example.com:1234'] 
for proxy in candidate_proxies: 
    print "Trying HTTP proxy %s" % proxy 
    try: 
     result = urllib.urlopen("http://www.google.com", proxies={'http': proxy}) 
     print "Got URL using proxy %s" % proxy 
     break 
    except: 
     print "Trying next proxy in 5 seconds" 
     time.sleep(5) 
+0

usando su ejemplo, ¿cómo puedo imprimir qué proxy está usando en el momento en que ocurre el urlopen? – Shady

+0

@Shady: simplemente arroje una declaración 'print' que imprime el valor de' proxies ['http'] '. Eche un vistazo a mi ejemplo actualizado para ver cómo se podría hacer. –

+0

ok gracias, pero si quiero más proxies, como toneladas, por ejemplo 10 proxies, abriendo uno antes del siguiente – Shady

0

Aquí ejemplo de código guía cómo utilizar urllib para conectarse a través de proxy:

authinfo = urllib.request.HTTPBasicAuthHandler() 

proxy_support = urllib.request.ProxyHandler({"http" : "http://ahad-haam:3128"}) 

# build a new opener that adds authentication and caching FTP handlers 
opener = urllib.request.build_opener(proxy_support, authinfo, 
            urllib.request.CacheFTPHandler) 

# install it 
urllib.request.install_opener(opener) 

f = urllib.request.urlopen('http://www.google.com/') 
""" 
15

Python 3 es ligeramente diferente aquí. Se tratará de detectar automáticamente la configuración del proxy, pero si necesita ajustes específicos o manual de proxy, pensar en este tipo de código:

#!/usr/bin/env python3 
import urllib.request 

proxy_support = urllib.request.ProxyHandler({'http' : 'http://user:[email protected]:port', 
              'https': 'https://...'}) 
opener = urllib.request.build_opener(proxy_support) 
urllib.request.install_opener(opener) 

with urllib.request.urlopen(url) as response: 
    # ... implement things such as 'html = response.read()' 

se refieren también a the relevant section in the Python 3 docs

0

para HTTP y utilizar https:

proxies = {'http':'http://proxy-source-ip:proxy-port', 
      'https':'https://proxy-source-ip:proxy-port'} 

proxies más se pueden añadir de manera similar

proxies = {'http':'http://proxy1-source-ip:proxy-port', 
      'http':'http://proxy2-source-ip:proxy-port' 
      ... 
      } 

uso

filehandle = urllib.urlopen(external_url , proxies=proxies) 

No utilizar servidores proxy (en el caso de los enlaces dentro de la red)

filehandle = urllib.urlopen(external_url, proxies={}) 

usar proxies autenticación a través de usuario y contraseña

proxies = {'http':'http://username:[email protected]:proxy-port', 
      'https':'https://username:[email protected]:proxy-port'} 

Nota: evitar el uso de caracteres especiales como :,@ en nombre de usuario y contraseñas

Cuestiones relacionadas