#!D:/Perl/bin/perl.exe # Webページ表示チェックPerlスクリプトその1(Windowsサーバー専用BASP21版) # BASPhttp1.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); # $urlに設定したURLのWebページを標準出力(HTTPクライアント) } 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 ($rc, $data) ; # Set bsocket = WScript.CreateObject("basp21.socket") ' WSH(Windows Scripting Host) my $BSOCKET = Win32::OLE -> new('basp21.socket'); #Basp21オブジェクトの作成と変数の確保 # rc = bsocket.Connect(dest,port[,timeout]) # タイムアウト省略値120秒 $rc = $BSOCKET -> Connect($host ,$port ,$timeout); # $rc=0:接続OK、0以上:Winsock Error(典型的なエラーは 11001 ホスト名が見つからない) # $rc=-1:ソケットオープンエラー、-2 : タイムアウト print "Connect=$rc\n"; # 正常時は、0を表示。 # rc = bsocket.Write(data) # data [in] : 送信データ変数。 $rc = $BSOCKET -> Write("GET $path HTTP/1.0\r\n\r\n");# $rc=0:送信OK、0以上:Winsock Error # $rc=-1:ソケットクローズ、-2 : タイムアウト、-3 : データなし print "Write=$rc\n"; # 正常時は、0を表示。 # data = bsocket.Read2([mode]) # data [out] : データを受取る変数。 # mode [in] : 受取るデータ形式。0:文字列(省略値)、1:バイナリ。1バイトの配列でデータが返されます。 # 2:16進形式の文字列。16:文字列。到着したデータをピークします。データは、バッファに残します。 # 17:バイナリのピーク。18:16進形式のピーク。 # bsocket.Result # プロパティに結果コードが数字で返されます。 do { # ヘッダーも含めた応答伝文を読む。 $data = $BSOCKET -> Read2(0); $rc = $BSOCKET -> Result; # $rc=0:受信OK、0以上:Winsock Error # $rc=-1:ソケットクローズ、-2 : タイムアウト、-3 : データなし print "$data\n"; # 応答伝文を表示。正常時は、HTTP/1.1 200 OK...を表示。 } while ($rc == 0); # bsocket.Close $BSOCKET -> Close; # 接続を切断します。 }