• ベストアンサー

特定のURLへのリクエストをし、そのレスポンスを変数に格納する方法

こんにちは。 ちょっと文字で表現するのが難しいのですが、行いたい事は --------- 数字は --------- というHTMLが表示されるだけのPerlプログラムA.plがあるとします。 また、「100」という数字をレスポンスで返すだけのPerlプログラムB.plがあります。 で、行いたいのは A.pl内で、B.plを呼び出して、100という数値を受け取り A.pl内で出力したいのです。 ---------------------- A.plイメージ $num=URLリクエスト関数(http://aaa.com/B.pl) <html> 数字は print << "HTML"; $num%<br> HTML </html> ---------------------- A.pl結果イメージ 数字は100 ---------------------- という感じデス。 (URLリクエスト関数()という都合の良いようなものがあれば、という あくまでイメージです) このような形で、ある特定のプログラムのレスポンスを取得して その結果を、その呼び出しも元のファイルで使用できるようにするには どのようにすればよろしいでしょうか。 ご存知の方、是非ご教授ください。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

私が意味を取り違えているかもしれませんが、、、 そのB.plが通常のCGIとして print "Content-type:text/html\n\n"; print "100"; と言うようにちゃんとヘッダも出力するものなら #1さんのお答えどおりで出来ると思います。 でも、もしもB.plがヘッダを出力せず、 100 とだけ出力するものなら B.plが通常のCGIでは500Server Errorになってしまいますので nph-cgiにするなどhttpdでヘッダの解析をしないようにする必要が有ります  普通のApacheなどの設定ではFile名の頭にnph-をつけて nph-B.cgi などのFile名にすればOKです。 次にA.pl側ですが、nph-B.cgi側へリクエストを送っても ヘッダも何も無しで、数字のみしか帰ってこないので LWPだと解析できないのではないかと思います 面倒ですが自前でSocket通信しないといけないかと思います。 以下、サンプル(Perl離れて久しいのでダサいソースでゴメソ) #! /usr/local/bin/perl $Host = 'www.umasika.com'; $Page = "/~tarou/nph-B.cgi"; $Addr = (gethostbyname($Host))[4]; $Name = pack("S n a4 x8", 2, 80, $Addr); socket(S, 2, 1, 0); connect(S, $Name); binmode(S); select(S); $| = 1; select(stdout); print S "HEAD $Page HTTP/1.0\r\n\r\n"; $test=<S>; # これで$testに100が入る print "Content-type:text/html; charset=Shift_JIS\n\n"; print "<html><pre>\n"; print "http://$Host$Page から取得した値は = " . $test; __END__ うちで試した限りではこれで出来ましたが

その他の回答 (2)

回答No.3

もしかしてA.plとB.Plは同じサーバー内のスクリプトでしょうか? だとしたら全然違う方法で出来ます。 というかサーバー間通信など行わなくても `` などで呼び出せば出来ます #! /usr/local/bin/perl $num=`/home/hoge/www/test1/B.pl`; print << "HTML"; Content-type:text/html; charset=Shift_JIS <html> 数字は $num%<br> </html> HTML __END__

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

CPAN モジュールLWP を使って use LWP::Simple; $num=get("http://aaa.com/B.pl"); のようにできるんじゃないかな・ 実際に試してないので、$num にどんな感じで入るかは未確認です。

関連するQ&A