■概要
CookieとBasic認証を扱うHTTPクライアントが欲しくてPythonでサクッとつくってみました。※リクエストURLや設定情報を外部ファイルから読み込むようにすると更に使いやすいですが、それは別の機会に。
■実装
Pythonの標準モジュールであるurllib2、cookielibを使用します。
これらのモジュールはPythonのバージョンが2.4以降であれば、問題なく使用できます。
#!/usr/bin/env python # -*- coding: utf-8 -*- import os.path, sys def sendRequest(): # urllib2をインポートする。 from urllib2 import urlopen, Request # Basic認証の認証情報を設定 auth_realm = 'realm' auth_host = 'host_name' auth_id = 'id' auth_pw = 'password' # cookieの保持情報を設定する。(下記指定ではカレントディレクトリが保存先と) COOKIEFILE = 'cookies.lwp' # cookielibモジュールの読み込み try: import cookielib except ImportError: cookielib = None else: # 正常に読み込めた場合、LWPCookieJarクラスのインスタンス化。 cj = cookielib.LWPCookieJar() # URLハンドラをセットアップする。 if cj is not None: if os.path.isfile(COOKIEFILE): cj.load(COOKIEFILE) if cookielib: # Basic認証用にHTTPBasicAuthHandlerクラスをインスタンス化し、認証情報を付与する。 auth_handler = urllib2.HTTPBasicAuthHandler() auth_handler.add_password(auth_realm, auth_host, auth_id, auth_pw) opener = urllib2.build_opener(auth_handler,urllib2.HTTPCookieProcessor(cj)) urllib2.install_opener(opener) else: print "Sorry, can't cookielib." # リクエスト情報を設定する。 theurl = 'http://www.google.com/' txdata = None txheaders = {'User-agent': 'something_useragent'} # リクエスト情報をもとにRequestクラスをインスタンス化し、リクエストを送信する。 try: req = Request(theurl, txdata, txheaders) response = urlopen(req) # リクエストエラーの場合、エラー情報を出力する。 except IOError, e: print 'Failed to open "%s".' % theurl if hasattr(e, 'code'): print 'Error code: "%s".' % e.code # レスポンスを出力する。 else: print '===== Here are the request of the page. =====\n' print str(url) + '\n' print '***** Here are the headers of the page. *****\n' print str(response.info()) + '\n' print '----- Here are the contents of the page. -----\n' print str(response.read()) + '\n' # Cookieを保存する。 if cj is None: print "Sorry, no cookie jar." else: print "Here are the cookies received so far:" for index, cookie in enumerate(cj): print index, ': ', cookie cj.save(COOKIEFILE) return 0 if __name__ == "__main__": sys.exit(sendRequest())以上です。
参考URL
http://www.python.jp/doc/2.4/lib/module-urllib2.html
http://www.python.jp/doc/2.4/lib/module-cookielib.html
http://www.python.jp/doc/2.4/lib/file-cookie-jar-classes.html
参考文献
Python クックブック 第2版(O'Reilly Japan)
0 件のコメント:
コメントを投稿