58

Pythonでhttp接続のユーザー名とパスワードを使用してプロキシを指定する最良の方法は何ですか?

4

6 に答える 6

58

これは私のために働く:

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()
于 2008-08-29T07:30:35.720 に答える
15

http_proxyという名前の環境変数を次のように設定します:http:// username:password @ proxy_url:port

于 2010-10-15T14:06:56.003 に答える
10

認証を必要とするプロキシを通過する最善の方法は、urllib2を使用してカスタム URL オープナーを構築し、それを使用してプロキシを通過するすべてのリクエストを作成することです。特に、URL や Python ソース コードにプロキシ パスワードを埋め込みたくない場合があることに注意してください (簡単なハックでない限り)。

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

より複雑なプログラムでは、必要に応じてこれらのコンポーネントを分離できます (たとえば、アプリケーションの存続期間中、1 つのパスワード マネージャーのみを使用するなど)。Python のドキュメントには、urllib2 を使って複雑なことを行う方法についての例が他にもあります。

于 2008-08-29T22:52:47.723 に答える
3

または、常に urllib2.urlopen で使用されるようにインストールする場合 (オープナーへの参照を保持する必要はありません):

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()
于 2008-09-26T22:17:59.063 に答える
2

これが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/')
"""
于 2016-03-25T08:37:45.853 に答える