- ベストアンサー
コマンドラインでGET or POSTできますか?
ふとしたことで、cgiからcgiを呼び出す必要に迫られてしまいました。そこで、呼び出す側はsystem()でやるとして、引数はどのように渡したらいいのでしょうか。 ブラウザでは、メソッド指定で呼び出せますが、コマンドラインでgetまたはpostで渡す方法というのはありますか? /hoge.cgi?name=value というのをPOSTでやりたくて、 $tmp = "name=value"; system("echo $tmp | perl hoge.cgi"); とか試して爆沈しました...(汗
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
main.cgiというメインのCGIから http://www.foo/fuga/cgi-bin/hoge.cgi?name=onamae&id=1000 を呼び出すという想定で、方法を2つほど御紹介します。 その1 引数をコマンドラインオプションとして渡す。具体的にはmain.cgiの中で $name="onamae"; $id="1000"; system("perl hoge.cgi $name $id"); などとして呼び出します。hoge.cgiでは $name = $ARGV[0]; $id = $ARGV[1]; とすればとりあえず引数を渡すことはできます。 その2 locationを使ってブラウザから呼び出させる。具体的にはmain.cgiの中で $name="onamae"; $id="1000"; print "Location: http://www.foo/fuga/cgi-bin/hoge.cgi?name=${name}&id=$id\n\n"; としてやります。この場合ブラウザは http://www.foo/fuga/cgi-bin/hoge.cgi?name=onamae&id=1000 の処理結果を表示しようとしますので、hoge.cgiがhtml出力をしないCGIだとmain.cgiを呼び出した段階でブラウザが止まってしまいます。 どちらもやったことはあるので経験者としておきます。私の場合は思い通りに動きました。 pythianさんの環境でうまくいくかどうかはわかりませんが。
その他の回答 (1)
- quenista
- ベストアンサー率28% (122/425)
やった事が無いのですが、考えられる方法だけ。 post形式で送るなら system("perl hoge.cgi $tmp"); で行けないですかね? get形式なら、 環境変数の「QUERY_STRING」に値を放り込んで、 後はcgiを呼べば良いと思うのですが...。 後、環境変数に「REQUEST_METHOD」に、GET形式かPOST形式かの種別を入れて置く方が良いのかも。
お礼
なるほど、環境変数というのをすっかり忘れていました。 また、どうやらcgiの呼び出し元と呼び出し先で全く同じルーチンを使って引数を読んでいたので、内容が上書きされてしまっていたようです。無事に解決しました。ありがとうございました。
お礼
コマンドラインから引数を渡したことが無かったので、ARGVで取り出せるのは初めて知りました。ブラウザが前提の設計でstdinから読ませていると、そのままではダメなんですね。 その2も大変参考になりました。ありがとうございました。