うまいぼうぶろぐ

linuxとhttpdとperlのメモ

WWW::Mechanize付属のmech-dumpがbasic認証できない

どっか見間違ってるのかな。optionsには--userと--passwordがあるけど、それを指定しても認証とおらないんだけど。WWW::Mechanizeのversionは1.60.

$ mech-dump --user=user --password=pass http://example.com/auth/page/
Error GETing http://example.com/auth/page/: Authorization Required at /usr/local/bin/mech-dump line 90

とか言われる。
とりあえずソース見てみた。91行目以降に認証の処理をしてるっぽいけど、手前の90行目でコケてる。

90 my $response = $mech->get( $uri );
91 if (!$response->is_success and defined ($response->www_authenticate)) {
92     if (!defined $user or !defined $pass) {
93         die("Page requires username and password, but none specified.\n");
94     }
95     $mech->credentials($user,$pass);
96     $response = $mech->get( $uri );
97     $response->is_success or die "Can't fetch $uri with username and password\n", $response->status_line, "\n";
98 }

んー、よくわかんないけど95行目のuser,passを入力する処理を90行目のgetの前に書いてみたらいけた。いいのかなこんなんで。

$ diff -u /usr/local/bin/mech-dump mech-dump.fix 
--- /usr/local/bin/mech-dump    2010-03-15 09:39:21.000000000 +0900
+++ mech-dump.fix       2010-03-15 11:42:39.551356864 +0900
@@ -87,6 +87,9 @@
	 $mech->agent_alias( $agent_alias );
 }
 $mech->env_proxy();
+if ($user) {
+  $mech->credentials($user,$pass);
+}
 my $response = $mech->get( $uri );
 if (!$response->is_success and defined ($response->www_authenticate)) {
	 if (!defined $user or !defined $pass) {