投稿者:higashi.mutsuhito 投稿日時:2010/02/09(火) 22:43
住まいがレオパレスということで、インターネット接続はLEO-NETを利用している。このLEO-NETを利用するには、接続の初っ端にHTTPの基本認証を通らないといけない仕様になっている。これをブラウザを使ってやってもいいのだが、毎回のことになると面倒なので基本認証を行うRubyのスクリプトを動かすようにしている。
# -*- coding: Windows-31J -*- require 'net/http' require 'uri' DEFAULT_URI = 'http://www.google.co.jp/' @encpass = "" def fetch(uri_string) uri = URI.parse(uri_string) begin Net::HTTP.start(uri.host, 80) do |http| response = http.get(uri.path, { 'Authorization' => 'Basic ' + @encpass }) if response.code == '302' or response.code == '307' then fetch(response['location']) elsif response.code != '200' then raise(response.code + ' ' + response.message) end end rescue Exception system( 'wscript LeonetAuth.vbs "' + "認証に失敗しました。\n" + $!.message + "\n" + '再試行しますか?"') retry if $? == 0 end end if ARGV.length < 1 then system('wscript LeonetAuth.vbs ' + '"usage: ruby LeonetAuth.rb id:password [URI]"') exit(1) end @encpass = [ ARGV[0] ].pack("m") fetch(ARGV.length < 2 ? DEFAULT_URI : ARGV[1])
これをたとえばLeonetAuth.rbという名前で保存しておくわけだ。このスクリプトではダイアログボックスの表示にVBScriptを使っているので、同一ディレクトリにLeonetAuth.vbsという名前で、
Set args = WScript.Arguments Set shell = WScript.CreateObject("WScript.Shell") If args.Count = 0 Then message = "" Else message = args(0) End If If shell.Popup(message, 0, "LeonetAuth", vbOKCancel + vbQuestion) _ = vbOK Then WScript.Quit(0) Else WScript.Quit(1) End If
というファイルを作っておく必要がある。Rubyスクリプトをコマンドラインから実行してもいいが、
@echo off <drive-letter>: cd <script-directory> ruby LeonetAuth.rb <user-id>:<password>
のようなバッチファイルを作成して、スタートアップフォルダに入れるなり、グループポリシーのスタートアップスクリプトに登録するなりしておけば、認証に煩わされることもなくなる。蛇足ながら、<drive-letter>はスクリプトを保存したドライブ名、<script-directory>はスクリプトを保存したディレクトリパス、<user-id>はLEO-NETのユーザID、<password>はLEO-NETのパスワードに置き換える。さらに蛇足だが、このスクリプトはRubyがインストールされているWindows上でしか動かない。さてさて、このエントリが役に立つ人が世の中にどのくらいいるだろうか(^^ゞ。

WindowMobileでは。。。
こんにちわ。
私もレオパレスに住んでおり、
Leo-net接続に対してまったく同じ不便を感じています。
特に無線Lanを通してWindowsMobile端末(Willcom03)を使う場合、
わざわざ最初にブラウザを開いて認証する必要があり不便なので、
これを自動化できないかと色々試行錯誤中です。
そこで見つけたのがこちらのページで、
RubyならWindowsMobile上で動くruby-mswinceを用いて
実行できるのではないかと思ったのですが、、、
やはりだめでした。
「このエントリが役に立つ人が世の中にどのくらいいるだろうか(^^ゞ」
と書いておられたので、あと一歩で役に立ちそうだった人からのご報告でした。
Ruby on WindowsMobile
手元に同様の環境がないので(WILLCOM03は持ってるんですけどね)、直接確認はできていないんですが、Googleで検索してみたらSocketが使えるとか使えないとかあるみたいですね。ここに書いたスクリプトだとダイアログボックスの表示にVBScriptを使ったりと邪悪なこともしていて、そのあたりをputsに置き換えたら何か手がかりがつかめる...、かもしれません。