58 votes

Comment spécifier un proxy authentifié par un python de connexion http?

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?

58voto

bernhardrusch Points 4445

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()

15voto

ducu Points 571

Configuration d'un environnement var nommé http_proxy comme ceci: http://username:password@proxy_url:port

10voto

gz. Points 1979

Le meilleur moyen de passer par un proxy qui requiert l'authentification à 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 que vous pouvez également trouver utile.

3voto

Tony Meyer Points 4700

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")

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X