フォームに入力されたURLにファイルが在るか知るには?
[上に]
[前に]
[次に]
そうめん
1998/08/26(水) 14:52:20
例えばフォームにURLを入力してsubmitしてもらったあとで
「そのURLにファイルは無いようです。
もう一度入力して下さい」とか表示させたいのですが。
上手い方法は無いのでしょうか?
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スクリプト?入力内容
で呼び出すというのはいかがでしょう?
そうめん
1998/08/27(木) 15:41:03
質問の補足。例えば、フォームからURL入力してもらって、
おもしろホームページのデータベースをつくるcgiを組もう
とかいうときに、間違ったURLは自動的に受け付けないよう
したいじゃないですか。
それを実現する事は可能か?ということなのです。
だからファイルテスト演算子 -e は使えないということで、
お願いします。すみません。
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で書いたリンクチェッカ
なんてそこらじゅうにあるでしょうから(でも僕は知らない(^^;)、
それを使うのがいいかも。
匿名希望
1998/09/03(木) 02:41:00
http://www2d.biglobe.ne.jp/~Egama/cgi/step10.htm
が参考になるでしょう。
gama
[E-Mail]
[HomePage]
1998/09/03(木) 21:45:29
匿名希望さん、ご紹介ありがとうございます。
上の匿名希望さんの link では、とべないので(^^;;;
http://www2d.biglobe.ne.jp/~gama/cgi/step10.htm
http://www2d.biglobe.ne.jp/~gama/cgi/step11.htm
step11 にある、chkurl.pl が、リンクチェッカ の一例であります。
gama
[E-Mail]
[HomePage]
1998/09/03(木) 21:45:37
匿名希望さん、ご紹介ありがとうございます。
上の匿名希望さんの link では、とべないので(^^;;;
http://www2d.biglobe.ne.jp/~gama/cgi/step10.htm
http://www2d.biglobe.ne.jp/~gama/cgi/step11.htm
step11 にある、chkurl.pl が、リンクチェッカ の一例であります。
そうめん
1998/09/30(水) 19:52:56
[[解決]]
皆さんいろいろありがとうございました!
よっく分かりました!
(0から構築するには、ソケット勉強しないといけませんな。)
[上に]
[前に]
[次に]