フォームに入力された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から構築するには、ソケット勉強しないといけませんな。)

[上に] [前に] [次に]