PythonでBASIC認証

30分プログラム、その572。PythonBASIC認証をやってみる。
PythonBASIC認証をやる流れは、

  • パスワードをマネージャ(Mgr)に登録する
  • マネージャからhandlerを作る
  • handlerからopenerを作る(build_opener)
  • openerをインストールする(install_opener)
  • urlopenでURLを開く

となる。
なんかややこしい気がする。たぶん、最初にopenerをインストールしてしまえば、後は認証については気にしなくてもいいのが利点なんだろう。

使い方

$ python basic.py
Username: mzp
Password: ****
<?xml version="1.0" encoding="UTF-8"?>
<statuses type="array">
<status>
  <created_at>Wed Apr 29 10:38:49 +0000 2009</created_at>
  <id>1647799957</id>
  <text>&#12354;&#12289;&#12458;&#12502;&#12472;&#12455;&#12463;&#12488;&#20351;&#12360;&#12400;&#12356;&#12356;&#12435;&#12384;</text>
  <source>&lt;a href="http://coderepos.org/share/browser/lang/ruby/misc/tig.rb"&gt;tig.rb&lt;/a&gt;</source>
  <truncated>false</truncated>
  <in_reply_to_status_id></in_reply_to_status_id>

ソースコード

#! /usr/bin/python
# -*- mode:python; coding:utf-8 -*-
#
# basic.py -
#
# Copyright(C) 2009 by mzp
# Author: MIZUNO Hiroki / mzpppp at gmail dot com
# http://howdyworld.org
#
# Timestamp: 2009/04/29 20:51:29
#
# This program is free software; you can redistribute it and/or
# modify it under MIT Lincence.
#

from getpass import getpass
from urllib2 import *
import sys

mgr = HTTPPasswordMgrWithDefaultRealm()
print "Username: ",
user = sys.stdin.readline().strip()
mgr.add_password(None,'twitter.com',user,getpass())
handler = HTTPBasicAuthHandler(mgr)
install_opener(build_opener(handler))

print urlopen('http://twitter.com/statuses/user_timeline.xml').read()