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

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中