学内無線LANのferecとかいうのに自動でログインしてみる。
ついでにブラウザのプロキシも変更。*1
#! /usr/bin/perl use strict; use warnings; use LWP::UserAgent; # パスワード入力時にエコーを消すために使う。 use Term::ReadKey; # プロキシの設定ファイル。 my $proxy_file = 'C:/proxy.txt'; # プロキシの設定ファイルのバックアップ。ログイン時にこれを作って、ログアウト時に戻す。 my $proxy_file_org = 'C:/proxy.txt.org'; # 設定ファイルの中身。 my $proxy_file_data = <<'EOF'; function FindProxyForURL( url, host ) { return "PROXY proxy.uec.ac.jp:8080"; } EOF # HTML表示 sub w3m { my $html = shift @_; open W3M, '| /usr/bin/w3m -dump -T text/html -I EUC -O SJIS' or die 'w3mが開けない。' . "$!\n"; print W3M $html; close W3M; } # ユーザ名とパスワード my $user = undef; my $pass = undef; if( &login_shiteru ){ &logout; &proxy_file_reset; }else{ &login; &proxy_file_set; } exit; # ログインしてるか。 sub login_shiteru { return ( -e $proxy_file_org ); } # ログイン sub login { print STDERR 'ログイン' . "\n"; # ユーザ名確認 while( not $user ){ print STDERR "ユーザ名 : "; $user = <STDIN>; chomp $user; } # パスワード確認 while( not $pass ){ print STDERR "パスワード : "; ReadMode 'noecho'; # 画面にエコーしないように。 $pass = ReadLine 0; # 1行読み取り。 chomp $pass; ReadMode 'normal'; # 画面のモードを元に戻す。 print "\n"; # 改行がでないので。 } # 送信 my $ua = new LWP::UserAgent; my $url = 'https://ferec.cc.uec.ac.jp/cgi-bin/ferec.cgi'; my $res = $ua->post( $url, { user => $user, pass => $pass, } ); if( $res->is_error ){ w3m( $res->error_as_HTML ); die "post失敗。\n"; } # 認証結果を出力。 w3m( $res->content ); } # ログアウト sub logout { print STDERR 'ログアウト' . "\n"; # 送信 my $ua = new LWP::UserAgent; my $url = 'https://ferec.cc.uec.ac.jp/cgi-bin/ferec.cgi?logout='; my $res = $ua->get( $url ); if( $res->is_error ){ w3m( $res->error_as_HTML ); die "get失敗。\n"; } # 認証結果を出力。 w3m( $res->content ); } # 内部用設定ファイルに書き換え。 sub proxy_file_set { # 元の設定ファイルを、名前変更して残す。 rename $proxy_file, $proxy_file_org or die '設定ファイルのバックアップが作れない。' . $!; # 新しい設定ファイルを作る。 open FILE, ">", $proxy_file or die 'ファイル(' . $proxy_file . ')が作れない。' . $!; print FILE $proxy_file_data; close FILE; } # 元の設定ファイルに戻す。 sub proxy_file_reset { # 元の設定ファイルを戻す。 rename $proxy_file_org, $proxy_file or die '設定ファイルが元に戻せない。' . $!; } __END__