[Perl] WWW::MechanizeでBasic/Digest認証で保護されたページを読む
WWW::Mechanizeは、LWP::UserAgentを継承しているので、
LWP::UserAgentと同じ方法でBasic or Digest認証が出来ます。
リクエスト発生からの処理の流れは、
- LWP::UserAgent::get
- LWP::UserAgent::request
- LWP::Authen::[Basic|Digest]::authenticate
- LWP::UserAgent::get_basic_credentials
perldoc LWP::UserAgentを読むと、Basic/Digest認証を使うには
サブクラスを作成しget_basic_credentials をオーバーライドするか、
credentials メソッドでパスワードを設定する。と書かれている。
credentials メソッドのほうが簡単そうなのでそちらを見てみる。
$ua->credentials( $netloc, $realm, $uname, $pass )
- $netloc は、ドメイン名とポート番号から成る文字列(例: "example.com:80") http:// は含まない。
- $realm は、プロンプトに表示される名前。Apacheの設定で言うと、AuthNameで設定する文字列。
- $unameと$pass は、想像通りユーザ名とパスワード。
サンプルコード
use WWW::Mechanize; my $ua = WWW::Mechanize->new; $ua->credentials('localhsot:80', 'Test Auth', 'test', 'test'); $ua->get("http://localhost/member/index.html");
第二引数の$realmってのがわかり難かったので、
Apacheの設定を例に説明すると ...
AuthName "Test Auth" <- $realm に指定する。 ブラウザのプロンプトに表示される文字列。 AuthType Basic <- 認証メソッド。 Basic認証の場合はLWP/Authen/Basic.pm が必要。
ちなみに、サブクラスでget_basic_credentialsをオーバーライドする場合は、
username と password の配列を返すメソッドを作る。
Gnu autotools 他
ポータビリティのあるMakefileを生成するconfigure(shell script)を生成する
ツール郡(説明長)。とてもじゃないけど使いやすいとは思えない。
ディレクトリ構造だけでも何とかならないかな。
autogen.sh というシェルスクリプトを使うと雛型生成 => コマンド実行まで
面倒を見てくれるらしい。
コマンドがたくさんあるので順番を覚えるのがタイヘン。
# configure.in Makefile.am src/Makefile.am を準備してから ... gettextize --intl -f find ./src -name "*.c" > ./po/POTFILES.in find ./include -name "*.h" >> ./po/POTFILES.in aclocal autoheader touch README NEWS ChangeLog AUTHORS automake -a autoconf ./configure
TODO
- いらないはファイル削除。コミットしない。
- gettextize, libtoolize, aprize