pythonでwebにアクセス。

pythonからインターネットにアクセスするパッケージはurllib2,requestsなどをつかいますが
プロキシ経由でアクセスする必要がある場合も考えねばなりませぬ。
認証が無いときは

import urllib2
url = "http://www.hogehoge.com"

proxies = {"http":"http://your_proxy:port"}
proxyHandler = urllib2.ProxyHandler(proxies)
opener = urllib2.build_opener(proxyHandler)
urllib2.install_opener(opener)
f = urllib2.urlopen(url)

というようにopenerを設定して開けますが、ベーシック認証が挟まると
これではつながらないので

import urllib2
url = "http://www.hogehoge.com"

proxies = {"http":"http://your_proxy:port"}
proxyHandler = urllib2.ProxyHandler(proxies)
auth_Handler = urllib2.HTTPBasicAuthHandler()
auth_Handler.add_password(None, 'http://hogehoge.com/', 'usr', 'pass')
opener = urllib2.build_opener(proxyHandler,auth_Handler)
urllib2.install_opener(opener)
f = urllib2.urlopen(url)

とauthハンドラを入れておけばいい。
だけどコードの引数に直接ユーザー名とパスワードを入れるのが気持ち悪いなあと感じていたら、getpassというライブラリがあった。
これはプロンプト上にpass入力を求めてかつ、入力は隠される。
これだ!
で、

import urllib2,getpass
usr=getpass.getuser()
pass=getpass.getpass("enter password")

url = "http://www.hogehoge.com"

proxies = {"http":"http://your_proxy:port"}
proxyHandler = urllib2.ProxyHandler(proxies)
auth_Handler = urllib2.HTTPBasicAuthHandler()
auth_Handler.add_password(None, 'http://hogehoge.com/', usr, pass)
opener = urllib2.build_opener(proxyHandler,auth_Handler)
urllib2.install_opener(opener)
f = urllib2.urlopen(url)

getuserメソッドはログインユーザーのユーザー名をとってくるのでAD環境なら
これでIDは引っ張れる。
getpass内のプロンプトは適当。
これでいい感じになった。
けどまだまだスキル不足
もっといい方法があれば是非教えてください。

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s