注意(追記:2013.03.22)
もうこの情報は古いので、いまはHTTP系の処理はrequestsを使ったほうがいいです。
動機
Web API使ってるとでてくる使い回しをメモ。
方法
まずはオーソドックスに
- GET
import urllib url = 'http://d.hatena.ne.jp/ymotongpoo' params = urllib.urlencode({'hoge':1, 'fuga':2}) f = urllib.urlopen(url + '?' + params) # paramsはhoge=1&fuga=2の形になっている print f.read()
- POST
import urllib url = 'http://d.hatena.ne.jp/ymotongpoo' params = urllib.urlencode({'hoge':1, 'fuga':2}) f = urllib.urlopen(url, params) print f.read()
ここでもしProxy越しにやるならこんな具合
proxies = {'http':'http://proxy.host:port'} f = urllib.urlencode(url, params, proxies) # POSTの場合 f = urllib.urlencode(url=url, proxies=proxies) # GETの場合
BASIC認証
認証が必要になってきたときは別のクラスを使わないといけない。
import urllib import urllib2 url = 'http://d.hatena.ne.jp/ymotongpoo' proxies = {'http':'http://proxy.host:port'} if 'http' in proxies: proxy_handler = urllib2.ProxyHandler(proxies) auth_handler = urllib2.ProxyBasicAuthHandler() else: auth_handler = urllib2.HTTPBasicAuthHandler() auth_handler.add_password('Twitter API', 'http://twitter.com/', 'hoge', 'fuga') if 'http' in proxies: opener = urllib2.build_opener(proxy_handler, auth_handler) else: opener = urllib2.build_opener(auth_handler) urllib2.install_opener(opener) f = urllib2.urlopen(url) print f.read()
PythonのマニュアルのProxyBasicAuthHandlerの例が微妙に間違ってるので注意。ここで、add_passwordの第1引数はrealmです。