Wie spezifiziere ich einen authentifizierten Proxy für eine Python-HTTP-Verbindung?

StackOverflow https://stackoverflow.com/questions/34079

  •  09-06-2019
  •  | 
  •  

Frage

Was ist der beste Weg, um einen Proxy mit Benutzername und Passwort für eine http-Verbindung in Python anzugeben?

War es hilfreich?

Lösung

Benutze das:

import requests

proxies = {"http":"http://username:password@proxy_ip:proxy_port"}

r = requests.get("http://www.example.com/", proxies=proxies)

print(r.content)

Ich denke, es ist viel einfacher als die Verwendung urllib.Ich verstehe nicht, warum die Leute es lieben, es zu benutzen urllib so viel.

Andere Tipps

Das funktioniert bei mir:

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

Festlegen einer Umgebungsvariablen mit dem Namen HTTP-Proxy so was: http://Benutzername:Passwort@Proxy-URL:Port

Der beste Weg, über einen Proxy zu gehen, der eine Authentifizierung erfordert, ist die Verwendung urllib2 um einen benutzerdefinierten URL-Öffner zu erstellen und diesen dann zu verwenden, um alle gewünschten Anfragen über den Proxy zu stellen.Beachten Sie insbesondere, dass Sie das Proxy-Passwort wahrscheinlich nicht in die URL oder den Python-Quellcode einbetten möchten (es sei denn, es handelt sich nur um einen schnellen 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..."

In einem komplexeren Programm können Sie diese Komponenten nach Bedarf trennen (z. B. indem Sie während der gesamten Lebensdauer der Anwendung nur einen Passwort-Manager verwenden).Die Python-Dokumentation hat Weitere Beispiele, wie man komplexe Dinge mit urllib2 erledigt die auch für Sie nützlich sein könnten.

Oder wenn Sie es installieren möchten, damit es immer mit urllib2.urlopen verwendet wird (damit Sie keinen Verweis auf den Opener bereithalten müssen):

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

Hier ist die Methode, die urllib verwendet

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/')
"""
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top