#!/usr/local/bin/perl #!D:/Perl/bin/perl.exe # Webページ表示チェックプログラムその2(IO::Socketモジュール使用例) # SOCKEThttp2.pl 2002.08.17 作成:鷹の巣 http://sakaguch.com/ # 参考URL # 説明が豊富なURL:http://x68000.q-e-d.net/~68user/net/http-2.html # 説明が豊富なURL:http://ash.or.jp/perl/socket_http.htm #■□■ URLの設定 ■□■ $url = 'http://example.com/'; # アクセスするURL $http_version = '1.1'; # HTTPプロトコル(Hypertext Transfer Protocol)の改版番号 $timeout = 60; # 接続待ち許容時間(秒) #■□■ URLの設定終わり ■□■ use IO::Socket; # IO::Socketモジュールを使用 &main(); # perlで、URLを閲覧 exit; sub main { $mes_error = &get($url,$http_version,$timeout); # $urlに設定したURLのWebページを標準出力(HTTPクライアント) print "$mes_error\n"; } 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 $mes_err = ""; # 戻り値を初期化。 my $SOCKET = IO::Socket::INET -> new(PeerAddr => $host, # HTTPプロトコルでWWWサーバーへ接続する PeerPort => $port, # サービスポート番号 Proto => "tcp", # プロトコル Timeout => $timeout,# 接続待ち許容時間(秒) ); if ($SOCKET) { if ($http_version eq '1.1') { # WWWサーバにHTTPリクエストを送る print $SOCKET "GET $path HTTP/1.1\r\n"; print $SOCKET "Host: $host\r\n"; print $SOCKET "Connection: close\r\n"; } else { print $SOCKET "GET $path HTTP/1.0\r\n"; } print $SOCKET "\r\n"; $SOCKET -> flush(); # バッファに溜まっているデータも送る while (<$SOCKET>){ m/^\r\n$/ and last; } # ヘッダ部分を除去する(改行のみの行ならループを抜ける) print <$SOCKET>; # HTTP応答を(ヘッダも含めて)受信して表示 $SOCKET -> close(); # WWWサーバーから切断する } else { $mes_err = "$hostのポート$portに接続できません。"; } return ($mes_err); # 戻り値を格納する。 }