[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