学科にてFERECのルータを使っているが、 最初の接続でWeb認証を行うが、その自動化ができないかと情報収集。 調べてみると、Bookmarklet という方法が紹介されている。 ブックマークにURLを登録する代わりに、JavaScript の処理を登録し、 認証の代わりにそのブックマークを参照する方法。
Web認証のBookmarkletは、NTTコミュニケーションのホットスポットの認証で使われいるので、そのプログラムは、URLエンコードされていたので、戻してみた。
javascript:(function(){ var d=document.forms[0]; d.login_name.value="XXXX"; // XXXXにユーザ名 d.password.value="YYYY"; // YYYYにパスワード d.submit(); })()
ちなみに、FERECの認証画面のformは、下記の通り。
<form method=post onsubmit="document.getElementById('sb').disabled = true; return true;"> ユーザ名 <input type=text name=user id=user size=20 autocomplete=off> パスワード <input type=password name=pass id=pass size=20 autocomplete=off> <input type=submit id=sb value="ログイン"> <input type=hidden name=login value=1> </form>
ということで、JavaScriptの細かい所がわかっていないが、以下のコードでいいのかな…
javascript:(function(){
var d=document.forms[0];
d.action="https://ferec.ei.fukui-nct.ac.jp/login.gsp";
d.user.value="XXXX"; // XXXXにユーザ名
d.pass.value="YYYY"; // YYYYにパスワード
d.login.value=1;// 追記:1/19これを消すと動いた d.submit();
})()
ひとまず、ブックマークを試すために、ちょい書きプログラムの URLエンコード処理などが必要なので、ちょいとPHPでプログラム。
追記:2010/01/14
動かなかったので、action="…"も追加してみたけれど、失敗。 何がまずいのかなぁ…
追記:2010/01/18
無名関数の呼び出し部分が {} と () の書き間違いを見つけた。 たぶんこれで動くはず…
- javascript:(function(){...}){} 誤 + javascript:(function(){...})() 正