Win2003にゃAD環境にある独立LinuxでNTLM認証してApache2に自動ログオンしようとして、かにゃりハマる。
mod_ntlmをapache2用にコンパイルするには
apache2ctl -V | g MPM
apt-get install apache2-threaded-dev
wget http://modntlm.sourceforge.net/mod_ntlm2.tar.gz
Makefile
APXS=apxs2
mod_ntlm.c
/*
apr_pool_sub_make(&sp,p,NULL);
*/
apr_pool_create_ex(&sp,p,NULL,NULL);
make
make install
cp .lib/*.so 〜
といった手順が必要で、かにゃりうざったい、ということを体験したあたりで、この日記を検索してみたら、
過去の同じ事例が失敗談つきで載ってて、
apt-get install libapache2-mod-perl2
cpan
install Apache2::AuthenNTLM
/etc/hosts
ping local_hostname
ping PDC_hostname
.htaccess
PerlAuthenHandler Apache2::AuthenNTLM
PerlAddVar ntdomain "DOM SV1 SV2"
PerlSetVar splitdomainprefix 1
PerlSetVar ntlmdebug 1
PerlSetVar ntlmauthoritative on
PerlSetVar defaultdomain DOM
# AuthType ntlm,basic
AuthType ntlm
AuthName "Dobutsu Area"
require valid-user
IEのイントラネットサーバとNonProxyホストに追加
で、すんにゃり完成したのであった。
日記にあるにゃら早く気づけ!!
めくるめくPerlモジュールの世界・・・というわけで。
要はwwwのロボットに近い物にゃんだけど、フォームに何か入れてPOST〜みたいにゃ操作がとっても楽。
use WWW::Mechanize;
my $agent = "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)";
my $mech = WWW::Mechanize->new(agent=>$agent);
$mech->get( $url );
$mech->set_visible( $user, $pass ) ;
$mech->click( "Login_button" , 0 , 0 );
$mech->submit_form(form_name => "form2",fields=>{"mail" => "neko@neko.com"});
my $html = $mech->content;
$html =~ s/$str/$str\n<input type="hidden" name="button.x" value="0"\/>/;
$mech->update_html( $html );
$mech->submit_form(form_name => "form3",fields=>{"comment" => "nekoneko-"});
$mech->back();
$mech->reload();
こんにゃ感じでセッション維持しつつ、既存フォームに何か入れて次の画面へ進めるし、js系でPOST内容増やしてる場合には、元のhtmlを任意に書き換えて解釈し直せる。上には出てにゃいけど、リンクの一覧から正規表現かけて絞り込んだりとか、お手軽機能が揃ってる。
何とにゃれば下位のLWPに降りて、任意のヘッダでリクエストできるし、得られたhtmlはParseして必要にゃ部位だけ抜き取ればよい。