Hvordan du angir en autentisert proxy for en python http tilkobling?

stemmer
46

Hva er den beste måten å angi en proxy med brukernavn og passord for en http-forbindelse i python?

Publisert på 29/08/2008 klokken 06:55
kilden bruker
På andre språk...                            


6 svar

stemmer
57

Dette fungerer for meg:

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()
Svarte 29/08/2008 kl. 07:30
kilden bruker

stemmer
15

Sette et miljø Var heter http_proxy som dette: http: // brukernavn: passord @ proxy_url: port

Svarte 15/10/2010 kl. 14:06
kilden bruker

stemmer
9

Den beste måten å gå via en proxy som krever godkjenning bruker urllib2 å bygge en tilpasset url åpneren, deretter bruke den til å gjøre alle forespørsler du ønsker å gå gjennom proxy. Legg spesielt merke til, har du sannsynligvis ikke vil legge inn proxy passord i url eller Python kildekoden (med mindre det er bare en rask 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..."

I et mer komplekst program, kan du skille disse komponentene ut etter behov (for eksempel bare bruker ett passord manager for levetiden til programmet). Python dokumentasjon har flere eksempler på hvordan å gjøre komplekse ting med urllib2 som du kanskje også finne nyttig.

Svarte 29/08/2008 kl. 22:52
kilden bruker

stemmer
3

Bruk denne:

import requests

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

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

print(r.content)

Jeg tror det er mye enklere enn å bruke urllib. Jeg forstår ikke hvorfor folk elsker å bruke urllibså mye.

Svarte 29/01/2017 kl. 11:19
kilden bruker

stemmer
3

Eller hvis du ønsker å installere det, slik at det alltid brukes med urllib2.urlopen (slik at du ikke trenger å holde en referanse til åpneren rundt):

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()
Svarte 26/09/2008 kl. 22:17
kilden bruker

stemmer
1

Her er metoden bruk 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/')
"""
Svarte 25/03/2016 kl. 08:37
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more