mo
[E-Mail]
1998/08/26(水) 16:47:36
これといって妥当な解決策はないです。安易に思い付く策としては、
CGI で HTTP 喋らせればいいんですが、チェックしようとした瞬間に
サーバがたまたまダウンしていたり、途中のネットワークが混雑して
いたりして、確実にチェックするすべはありません。
あと、トリッキーな案ですが、隠しフレームに開いて、メインとなるフレーム
からそのドキュメントの有無ってチェックできないのかな?
Aurai
[E-Mail]
1998/08/27(木) 01:39:56
print "Content-type: text/html\n\n<HTML>";
if (-e $ARGV[0]) {
print "<HEAD><META HTTP-EQUIV\=\"REFRESH\" CONTENT=\"0;URL\=$ARGV[0]\"></HEAD></HTML>";
} else {
print "<BODY>「そのURLにファイルは無いようです。もう一度入力して下さい」";
}
のようなスクリプトを用意して
CGIスクリプト?入力内容
で呼び出すというのはいかがでしょう?
B-Cus
1998/08/27(木) 16:35:00
#!/usr/local/bin/perl -w
use Socket;
$url = "
http://www.yahoo.co.jp/"; # 調べたいURL
($host,$path) = $url =~ m|^http://([^/]+)(.*)|; # ホスト名とパスを分離
$proto = getprotobyname('tcp'); # 6ね。
$port = getservbyname('http','tcp'); # こっちは80。
#print "proto=$proto port=$port host=$host path=$path\n";
$iaddr = inet_aton($host) || die "$hostってホストはないよ\n";
$sock_addr = sockaddr_in($port,$iaddr);
socket(SERVER,PF_INET,SOCK_STREAM,$proto) || die "ソケット作れなかった\n";
connect(SERVER,$sock_addr) || die "繋げらんない。サーバ生きてる?\n";
select(SERVER); $|=1; select(STDOUT); # バッファリングOFF
print SERVER "HEAD $path HTTP/1.0\n\n"; # サーバに送信
$status = scalar(<SERVER>); # 先頭の一行だけ読む
if ( $status =~ m/4\d\d/ ){ # 4xxならダメ
print "not found.\n";
if ( $status =~ m/2\d\d/ ){ # 2xxならOK
print "found.\n";
} else {
print "other.\n"; # 3xxとか。詳しくはRFCを読んでね。
}
とか。status304だと再接続、とかあるので、自分で作るのは
ちょっとめんどくさいかもしれません。perlで書いたリンクチェッカ
なんてそこらじゅうにあるでしょうから(でも僕は知らない(^^;)、
それを使うのがいいかも。