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?

Était-ce utile?

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/')
"""
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top