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内のプロンプトは適当。
これでいい感じになった。
けどまだまだスキル不足
もっといい方法があれば是非教えてください。