script - ¿Cómo especificar un proxy autenticado para una conexión http python?
proxy python script (6)
Aquí está el método use 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/'')
"""
¿Cuál es la mejor manera de especificar un proxy con nombre de usuario y contraseña para una conexión http en python?
Establecer un entorno var denominado http_proxy como este: http: // nombre de usuario: contraseña @ proxy_url: puerto
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()
La mejor forma de pasar por un proxy que requiere autenticación es usar urllib2 para crear un abridor de URL personalizado, y luego usarlo para realizar todas las solicitudes que desee realizar a través del proxy. Tenga en cuenta, en particular, que probablemente no desee insertar la contraseña del proxy en la url o en el código fuente de Python (a menos que sea 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 según corresponda (por ejemplo, solo usando un administrador de contraseñas durante el tiempo de vida de la aplicación). La documentación de python tiene más ejemplos sobre cómo hacer cosas complejas con urllib2 que también puede resultarle útil.
O si desea instalarlo, para que siempre se use con urllib2.urlopen (por lo que no necesita mantener una referencia al abridor):
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()
Utilizar esta:
import requests
proxies = {"http":"http://username:password@proxy_ip:proxy_port"}
r = requests.get("http://www.example.com/", proxies=proxies)
print(r.content)
Creo que es mucho más simple que usar urllib
. No entiendo por qué a las personas les encanta usar urllib
tanto.