Pregunta

¿Cuál es la mejor manera de especificar un proxy con usuario y contraseña para una conexión http en python?

¿Fue útil?

Solución

El uso de este:

import requests

proxies = {"http":"http://username:password@proxy_ip:proxy_port"}

r = requests.get("http://www.example.com/", proxies=proxies)

print(r.content)

Yo creo que es mucho más simple que el uso de urllib.No entiendo por qué la gente le encanta usar urllib por lo tanto.

Otros consejos

Esto funciona para mí:

import urllib2

proxy = urllib2.ProxyHandler({'http': 'http://
username:password@proxyurl:proxyport'})
auth = urllib2.HTTPBasicAuthHandler()
opener = urllib2.build_opener(proxy, auth, urllib2.HTTPHandler)
urllib2.install_opener(opener)

conn = urllib2.urlopen('http://python.org')
return_str = conn.read()

Configuración de un entorno var nombre la variable de entorno http_proxy como este: http://username:password@proxy_url:port

La mejor manera de ir a través de un proxy que requiere autenticación es mediante urllib2 para construir una url personalizada de apertura, entonces el uso que hacen de todas las solicitudes que se quiere ir a través del proxy.Nota, en particular, es probable que no desee incrustar la contraseña de proxy en la dirección url o el código fuente de python (a menos que sea sólo un truco rápido).

import urllib2

def get_proxy_opener(proxyurl, proxyuser, proxypass, proxyscheme="http"):
    password_mgr = urllib2.HTTPPasswordMgrWithDefaultRealm()
    password_mgr.add_password(None, proxyurl, proxyuser, proxypass)

    proxy_handler = urllib2.ProxyHandler({proxyscheme: proxyurl})
    proxy_auth_handler = urllib2.ProxyBasicAuthHandler(password_mgr)

    return urllib2.build_opener(proxy_handler, proxy_auth_handler)

if __name__ == "__main__":
    import sys
    if len(sys.argv) > 4:
        url_opener = get_proxy_opener(*sys.argv[1:4])
        for url in sys.argv[4:]:
            print url_opener.open(url).headers
    else:
        print "Usage:", sys.argv[0], "proxy user pass fetchurls..."

En un programa más complejo, puede separar estos componentes como apropiado (por ejemplo, sólo el uso de una contraseña de administrador para la duración de la aplicación).La documentación de python tiene más ejemplos de cómo hacer las cosas complejas con urllib2 que usted también puede encontrar útil.

O si desea instalar, por lo que se utiliza siempre con urllib2.urlopen (por lo que no es necesario mantener una referencia a la apertura de todo):

import urllib2
url = 'www.proxyurl.com'
username = 'user'
password = 'pass'
password_mgr = urllib2.HTTPPasswordMgrWithDefaultRealm()
# None, with the "WithDefaultRealm" password manager means
# that the user/pass will be used for any realm (where
# there isn't a more specific match).
password_mgr.add_password(None, url, username, password)
auth_handler = urllib2.HTTPBasicAuthHandler(password_mgr)
opener = urllib2.build_opener(auth_handler)
urllib2.install_opener(opener)
print urllib2.urlopen("http://www.example.com/folder/page.html").read()

Aquí es el uso del método urllib

import urllib.request

# set up authentication info
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.python.org/')
"""
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top