プロが教えるわが家の防犯対策術!

前回は下記のURLにて
http://oshiete1.goo.ne.jp/qa2542908.html
同一サーバーの場合アジャックスを使用すると出来るということは教えていただいたのですが、「別サーバーへのリンク先が存在しない時はリンクしない」といった場合はどうすればいいのでしょうか?
また、リンクは複数あるのでまとめて指定できるようにしたいです。
宜しくお願いします。

A 回答 (2件)

#! /usr/bin/perl


use CGI::Carp qw(fatalsToBrowser);
print"Content-type: text/html\n\n";
print"<html><body>\n";
print"<h1> TEST </h1>\n";
open (U,"url.txt");
while($Url=<U>)
{if($Url =~m|http://([^/]*)(/.*)|)
{$Srv = $1;
$Uri = $2;
$Ghb = (gethostbyname($Srv))[4];
$Con = pack("S n a4 x8", 2, 80, $Ghb);
socket(S, 2, 1, 0);
connect(S, $Con);
binmode(S);
select(S);
$| = 1;
select(stdout);
# ここから空行までがリクエストヘッダ
print S "HEAD $Uri HTTP/1.1\r\n";# リクエストヘッダの改行は\r\nである
print S "Host: $Srv\r\n";
print S "Connection: Keep-Alive\r\n";
print S "\r\n";# ヘッダの終端なので空行も出力
while(<S>)
{
if(m|HTTP/\d\.\d\s+([\d]+)\s.*|)
{
print "Status=[ $_ ] ";# TEST用、不要ならコメント化
if($1 == 200){print "<A href=\"$Url\">$Url</a> <BR>\n";}
# ↑ステータスコードが200の場合のみリンク表示
else{print "$Url <BR>\n";}
# ↑ 200以外はURLをテキスト表示(不要ならコメントアウト)
last;
}
}
}
}
close(U);
__END__

ステータスコードが200(正常なアクセス)のときのみリンク表示します。
Statusコードについては http://www.studyinghttp.net/status_code
転送、サーバーエラー, Not Foundなどの場合は200以外のコードを返します。

もしコード200のままで、エラーメッセージを表示するようにしていると
ヘッダだけではなく本文をチェックして分岐処理しなくてはいけません。

>http://www.xxx/xxxxooo oの部分のみ異なる場合はどうすれば良いのでしょうか?
同じサーバー内に複数のページがあるのでしたら
上のようにリクエストヘッダの中にConnection: Keep-Aliveを含めれば
効率的にアクセスできます。
その上で普通に
http://www.xxx/xxxxoo1
http://www.xxx/xxxxoo2
http://www.xxx/xxxxoo3
と列記すればよいと思います。
    • good
    • 0

まずURLのリストを別fileに列記(仮にfile名をurl.txtとします)



CGIをperlで書くなら例として
#! /usr/bin/perl
use CGI::Carp qw(fatalsToBrowser); #この行はデバッグ用( 正常動作を確認したらコメントアウトする)
print"Content-type: text/html; charset=shift_jis\n\n";
print"<html><body>\n";
print"<h1> TEST </h1>\n\n";
use LWP::Simple;
open (U,"url.txt");
while(<U>)
{ if(head($_)){print "<A HREF=\"$_\">$_</a><BR>\n"} }
close(U);
__END__

こんなので出来ますが、
例えばFORMでURLを入力してもらって自動リンクなどにする場合、
実用に供するには、URLの書式チェック&セキュリティチェックが必須です。

この回答への補足

ご回答ありがとうございます!!
教えていただいたcgiで出来ました!!
ただ、存在しない場合は動作するのですが今回アクセスするページがデータベースでして、そのデータベース上にデータが存在しない場合はNot Foundではなく「専用のエラーページにアクセスする」というプログラムがあるようです。
なので、このcgiでは「リンク先は存在する」と判断されてしまいリンクが表示されてしまうのです。
http://www.xxx/xxxx.htmlの場合はリンクしない」といった場合はどうすれば良いのでしょうか?
なお、リンクは複数あってそれぞれ下3桁のみ
http://www.xxx/xxxxooo oの部分のみ異なる場合はどうすれば良いのでしょうか?
リンクの数が多いので、できればphpとcgiの連携でくみたいのですが・・・
お手数ですがご教授宜しくお願いします。

補足日時:2006/11/21 16:13
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!