Comment spécifier un proxy authentifié par un python de connexion http?
Question
Quelle est la meilleure façon de spécifier un proxy avec un nom d'utilisateur et le mot de passe pour une connexion http en python?
La solution
Utilisez ceci:
import requests
proxies = {"http":"http://username:password@proxy_ip:proxy_port"}
r = requests.get("http://www.example.com/", proxies=proxies)
print(r.content)
Je pense que c'est beaucoup plus simple que d'utiliser urllib
.Je ne comprends pas pourquoi les gens aiment utiliser urllib
tellement.
Autres conseils
Cela fonctionne pour moi:
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()
Configuration d'un environnement var nommé http_proxy comme ceci: http://username:password@proxy_url:port
Le meilleur moyen de passer par un proxy qui requiert une authentification est l'aide de urllib2 pour construire une url personnalisée ouvreur, puis l'utilise pour faire toutes les requêtes que vous souhaitez passer par le proxy.Remarque en particulier, vous ne voulez probablement pas à intégrer le proxy mot de passe dans l'url ou le code source python (sauf si c'est juste un petit hack).
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..."
Dans un programme plus complexe, vous pouvez séparer ces composants comme approprié (par exemple, seulement en utilisant un gestionnaire de mot de passe pour la durée de vie de l'application).La documentation python a plus d'exemples sur la façon de faire des choses complexes avec urllib2 vous pouvez également trouver utile.
Ou si vous voulez l'installer, de sorte qu'il est toujours utilisé avec urllib2.urlopen (si vous n'avez pas besoin de conserver une référence à l'ouvreur autour):
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()
Voici la méthode à utiliser 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/')
"""