Cómo especificar un proxy autenticado por un python conexión http?
Pregunta
¿Cuál es la mejor manera de especificar un proxy con usuario y contraseña para una conexión http en python?
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/')
"""