
URL付のcgi を動かすにはどうしたらいいのでしょう。
つまり2つの独立したサーバーがあり、お互いに
呼び出して実行したい場合、同一サーバーなら通常、
$test= 'home/public_html/cgi/test.cgi';
open (test);
print while <test>;
ちょっとまどろっこしいんですが、このように実行
できるかと思うんです。
しかし、別のサーバーにあるとこうはかけません。
したがって1行目を
$test= 'http://test.com/cgi/test.cgi';
・・・と書きたいところなのですが、どうもうまく
実行されないようです。
何かいい解決策があれば教えてください。
No.2ベストアンサー
- 回答日時:
http: のスキームから始まるものは、当然プログラムという解釈ではないです。
HTTPというプロトコルを利用して、"ハイパー(Hyper)テキスト(Text)を転送(Transfer)する通信規約(Protocol)"なわけですから、そのサーバ上でプログラムが実行・解釈されて、そこからハイパーテキストを転送するだけです。
変数にそのプロトコルを利用するものを代入して、openしたって、Perlがそのプロトコルの手続きを代行してくれるものではありません。
「他のサーバのCGIを実行して、そこから排出されるハイパーテキストを取得したい」という事であれば、Socketモジュールでポート80番(http)への手続きを自分で行うか、LWPなどのモジュールを使用する必要があります。
恐らくLWP::Simpleを使用するのが一番簡単なので、
-----
use LWP::Simple;
$test= 'http://test.com/cgi/test.cgi';
getprint($test);
-----
で、恐らくご希望の動作が行えるはずです。
尚、LWP::Simpleは標準で使用出来るモジュールではないのでモジュールをインストールする必要があります。
(参考URLはLWPモジュールのダウンロード元)
Perl標準のSocketモジュールを使用する場合は
-----
use Socket;
my $test = 'http://master/';
my($host, $cgi) = ($test =~ m{^http://(.+?)(/.+)$});
my $osock =
sockaddr_in(scalar(getservbyname('http', 'tcp')),
scalar(gethostbyname($host)));
$| = 1;
socket(SOCK, PF_INET, SOCK_STREAM, getprotobyname('tcp'));
connect(SOCK, $osock);
send(SOCK, "GET $cgi HTTP/1.0\n\n", 0);
my $flag = 0;
while(<SOCK>){
$flag = 1 if /^[\r\n]+$/;
next unless $flag;
print;
}
close SOCK;
-----
こうすれば恐らく可能です(テストしていません)
ちなみに、
>$test= 'home/public_html/cgi/test.cgi';
>open (test);
>print while <test>;
では動かないはずです。
$test= 'home/public_html/cgi/test.cgi';
open (test, "$test |");
print while <test>;
なら動くとは思いますが…。
参考URL:http://search.cpan.org/search?dist=LWP5emu
回答ありがとうございます。
大変詳細かつ、明確な説明感謝いたします。
このスクリプトを穴のあくほど十分に参考にさせて
いただきます。m(__)m
No.3
- 回答日時:
すみません。
No.2のnipotanです。回答後にコードを読んでいて間違いに気付いたので補足です…。
Socketを使う場合のコードにミスがありました。
>socket(SOCK, PF_INET, SOCK_STREAM, getprotobyname('tcp'));
という行は、正確には
socket(SOCK, PF_INET, SOCK_STREAM, scalar(getprotobyname('tcp')));
としないとダメかも知れません。
ちなみに、
>my $test = 'http://master/';
というのは、私の手元の環境で/etc/hostsに加えているローカルコンテンツのURLを書いてしまいました ^^;
$testという変数に、実行したいCGIのabsolute URIを代入すればOKです。
(テストしてみました)
Socket の方法と両方試してみたのですが、LWP::Simple
の方法であっさり動いたので、感激しました。
いい感じです。ありがとうございました!!!
No.1
- 回答日時:
他サイトのCGIの呼び出しは,HTTP経由で行わなくてはなりません。
(そうでなくてはセキュリティ上問題がありすぎる)
逆にいえば,HTTP経由であれば可能ですが,そのためにはPerlからHTTPが扱えなくてはなりません。
その方法としては,
A)自分でプロセス間通信のプログラムを書く
B)どこかからHTTP通信を行うPerlモジュールを探しだしてくる
が考えられます。
A)については,Perlにはプロセス間通信のAPIが備わっているので,それを使えば良いでしょう。
B)については,どこかにはあると思いますが,私は知らないので,ご自分で探してみてください。
いずれにせよ,CGIがHTTPを経由してどのように動作するのかを理解している必要がありますので,まずHTTPやCGIの仕組みについて理解することをおすすめします(参考URLにいくつかそれらしいものを挙げておきましたが,これだけではたぶん不充分だと思います)。
参考URL:http://www.atmarkit.co.jp/fnetwork/rensai/netpro … http://www5a.biglobe.ne.jp/~n_rieko/cgi/init.htm
回答ありがとうございます。
今朝になってもどなたからも回答がないので、多少
へこんでいたところでした。
しかもHTTP経由で行なうとは思いつきませんでした。
参考URLを十分に参考にさせていただきます。m(__)m
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) VScodeでpythonプログラムの関数を実行したい 2 2022/07/13 19:24
- ホームページ作成・プログラミング CGIが実行可能なHP領域又はレンタルサーバーでおすすめの所を教えてください 現在ホームページ領域の 1 2023/01/01 11:47
- Excel(エクセル) VBA ワークシート指定の1行目を選択をしたい 2 2022/08/20 18:10
- ドライブ・ストレージ HDDのチェック方法 6 2022/05/04 09:49
- CGI CGIで出力するhtmlの<!DOCTYPE html>等のタグは要りますか? 2 2023/02/05 21:26
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- Java java final 1 2022/06/10 22:49
- システム ホームページの仕組みについて 3 2022/08/16 14:33
- Visual Basic(VBA) Excle VBA Findメソッドについて 3 2022/07/15 13:56
- JavaScript [再掲]指定したパスが現URLに含まれていたら特定要素を削除するJavascriptのコードについて 1 2023/05/10 15:09
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・【お題】甲子園での思い出の残し方
- ・【お題】動物のキャッチフレーズ
- ・人生で一番思い出に残ってる靴
- ・これ何て呼びますか Part2
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・あなたが好きな本屋さんを教えてください
- ・かっこよく答えてください!!
- ・一回も披露したことのない豆知識
- ・ショボ短歌会
- ・いちばん失敗した人決定戦
- ・性格悪い人が優勝
- ・最速怪談選手権
- ・限定しりとり
- ・性格いい人が優勝
- ・これ何て呼びますか
- ・チョコミントアイス
- ・単二電池
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・泣きながら食べたご飯の思い出
- ・一番好きなみそ汁の具材は?
- ・人生で一番お金がなかったとき
- ・カラオケの鉄板ソング
- ・自分用のお土産
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
HELP(CGI.Perl)について
-
perlのrequireの動き方について...
-
cgiとplとpm
-
環境変数に任意の文字列をセッ...
-
エクセルで相対パスの書き方を...
-
月の第一週とは
-
エクセルで毎月第2週日の水曜日...
-
VBA。複数のChangeイベントをま...
-
プルダウンで日付と曜日を取得する
-
ftpでのネットワークバイトオー...
-
よくある 『 第○(1・2・3・4・...
-
時計の曜日がいつのまにか違う
-
DBを10件毎に表示ページング...
-
週2回のペースって だいたい何...
-
EXCEL:ヘッダー日付を年号で?...
-
アンケートなどの1日1回の投...
-
今週とは何曜日から何曜日まで...
-
apacheで403を404のように見せる
-
曜日ごとの集計をしたい
-
日本語問題 昨日は何曜日ですか...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
cgiとplとpm
-
jcode.plが読み込めない
-
バイナリファイルのアップロード
-
Perlccを使ったCGIプログラムの...
-
perlのcgiで、変数の中身を表示...
-
htmlからテキストを返すperlを...
-
perlのrequireの動き方について...
-
Perlのデバッグ方法って。。。...
-
ダウンロード時のファイル名文...
-
Perlソースを2つのファイルに分...
-
webからroot権限のコマンドを実...
-
Location: で cgi → c...
-
Perlの作動不具合、missing bra...
-
error_logファイルの中身で教え...
-
useとrequireでエラー
-
www.URL 付のcgi を動かす
-
セッションファイルが作成でき...
-
携帯用のページに perl で post
-
Quantifier follows nothing in...
-
a.cgi経由で、b.cgi実行
おすすめ情報