前回は下記のURLにて
http://oshiete1.goo.ne.jp/qa2542908.html
同一サーバーの場合アジャックスを使用すると出来るということは教えていただいたのですが、「別サーバーへのリンク先が存在しない時はリンクしない」といった場合はどうすればいいのでしょうか?
また、リンクは複数あるのでまとめて指定できるようにしたいです。
宜しくお願いします。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.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
と列記すればよいと思います。
No.1
- 回答日時:
まず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の連携でくみたいのですが・・・
お手数ですがご教授宜しくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(コンピューター・テクノロジー) <a href="file:///フォルダ名/ファイル名">リンクテキスト</a>について 1 2023/04/06 22:40
- ドメイン・サーバー・クラウドサービス 自作サイトをサーバーにアップロードしたのですが… 2 2022/11/08 18:12
- サーバー 接続・ログインはできているのにメールが送信できない 2 2022/06/27 15:03
- 美術・アート トレパク疑惑をかけられにくくするには ここ最近いわゆるトレパク警察のいいがかりがが厳しくなったようで 1 2023/08/21 09:59
- SEO googleサーチコンソールで、重複URLが多数発生、その修正方法について 2 2023/06/23 16:15
- ネットワーク 一台のサーバーに複数個のIPアドレスを追加出来る事は知っていますが、具体的にどうやるのでしょうか? 4 2022/11/03 20:12
- その他(IT・Webサービス) 301リダイレクトの使い方について 7 2022/04/05 17:50
- ネットワーク DNSサーバーとWebサーバーについて 4 2023/03/21 19:40
- サーバー メールサーバーについて詳しい方、メールサーバーの管理業務経験のある方、教えてください。 3 2022/11/12 18:24
- 猫 写真の貼り込みが出来ない 2 2022/10/19 12:49
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで集計したい。
-
htmlからcgiを自動的に起動させ...
-
number 改行が追加できない
-
フォームを再送信しますか?
-
CGIの設置が分かりません・・・
-
ディープフェイクを作成するサ...
-
cgi
-
cgi アクセス制限 エラー
-
perlで書いたcgiでsqliteの使い...
-
VBAで条件から範囲を指定して色...
-
500 Internal Server Error
-
3DCG
-
ホームページにメールフォーム...
-
CGIの記述について教えてくださ...
-
ホームページにCGIを設置したの...
-
ホームページにCGIを設置したの...
-
サーバーのエラーでおしえてく...
-
ホームページの事でおしえてく...
-
さくらサーバーにcgiフォームを...
-
ホームページでCGIのフォームを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで集計したい。
-
フォームを再送信しますか?
-
apacheでPerl CGIが作動せず、5...
-
ホームページでCGIのフォームを...
-
生成AI画像について
-
/bin/awk '{print $5}'ってどう...
-
入力フォーム(電話番号)
-
(フリーの)ツリー掲示版CGI、...
-
古ーくからフリーのtree.cgi掲...
-
VBAで条件から範囲を指定して色...
-
ホームページにメールフォーム...
-
一番簡単なCGI,掲示板の設置教...
-
CGIって何ですか?簡潔に教えて...
-
サーバーのエラーでおしえてく...
-
サイト訪問者の情報を取得したい
-
htmlからパラメータで、cgiに渡...
-
CGIで出力するhtmlの<!DOCTYPE ...
-
cgiからsendmailを送信で文字化け
-
POSTメソッドの最大容量について
-
ホームページにCGIを設置したの...
おすすめ情報