#!D:/Perl/bin/perl.exe # Webページ表示チェックPerlスクリプトその2(Windowsサーバー専用BASP21版) # BASPhttp2.pl 2002.08.21 作成:鷹の巣 http://sakaguch.com/ # BASP21.DLLの入手先は、http://www.hi-ho.ne.jp/babaq/basp21.html # 参考Webは、BASP21ソケットオブジェクト # http://www.hi-ho.ne.jp/babaq/basp21s.html #■□■ URLの設定 ■□■ $url = 'http://example.com/'; # アクセスするURL $http_version = '1.1'; # HTTPプロトコル(Hypertext Transfer Protocol)の改版番号 $timeout = 60; # 接続待ち許容時間(秒) #■□■ URLの設定終わり ■□■ use Win32::OLE; # OLEパッケージの使用 &main(); # perlで、URLを閲覧 exit; sub main{ &get($url, $http_version, $timeout) } sub get { my ($url, $http_version, $timeout) = @_; # 引数0:URI、引数1:HTTPプロトコルのバージョン、引数2:接続待ち許容時間(秒) $url =~ /(http:)?(\/\/)?([^:\/]*)?(:([0-9]+))?(\/.*)?/; my $host = $3; if ($host eq "") {$host = 'localhost';} my $port = $5; if ($port eq "") {$port = 80;} # HTTPプロトコルgetservbyname('http','tcp')は80。 my $path = $6; if ($path eq "") {$path = '/';} my ($res, $data) ; my $BSOCKET = Win32::OLE -> new('basp21.socket'); # Basp21オブジェクトの作成と変数の確保 my $flag_result = 0; # 戻り値を「偽」に初期化。 if ($BSOCKET -> Connect($host ,$port ,$timeout)) { return($flag_result); }# 接続する。戻り値0で接続OK。 if ($http_version eq '1.1') { # WWWサーバにHTTPリクエストを送る $send_data = "GET $path HTTP/1.1\r\nHost: $host\r\nConnection: close\r\n\r\n"; } else { $send_data = "GET $path HTTP/1.0\r\n\r\n"; } if ($BSOCKET -> Write($send_data)) { return($flag_result); }# GETメソッドを投げる。戻り値0で送信OK。 do { # ヘッダーを読み飛ばす $data = $BSOCKET -> ReadLine2(); $res = $BSOCKET -> Result; print "$data\n"; # ヘッダーを表示。 } while (($res == 0) && (length($data) > 0)); sleep(5); do { # ヘッダー以外の応答伝文を読む。 $data = $BSOCKET -> Read2(0); $res = $BSOCKET -> Result; print "$data\n"; # htmlタグ等を表示。 } while ($res == 0); $BSOCKET -> Close; # 接続を切断します。 $flag_result = 1; # ここで、サブルーチン戻り値を「真」にする。 return($flag_result); # 戻り値を「真」にして終了。 }