68user's page 掲示板

Prev< No. 2245〜2246> Next  [最新発言に戻る] [過去ログ一覧]
No. 2245 # sio 2001/11/03 (土) 18:24:11
補足・その他です(^^;

main.cgi→index.cgi→test.cgi
となっていて
main.cgiでフォームを使いindex.cgiにpostでデータを送信しています。
この受け取ったデータをtest.cgiにそのまま渡したいのですが、
その方法で悩んでいます。
test.cgiはメンバー入り口で受け取った会員ナンバーによって
それぞれのページデータを読み込み表示するスクリプトになっていますので
直接
http://***.com/test.cgi?ID
などとされて入室されるのは避けたいのです

さらに考えた結果、index.cgiとtest.cgiをまとめてしまえば良い事に気付きました(^^;

ですが、今後の為にもSocketを使えるようになりたいので
もうちょっと努力してみます。

iwtaさんありがとうございます。
受け側では標準入力で良いのですね。
<SOCKET>をいろいろいじってみたりしてました。。。
ということは受けるほうでは
use Socket;
は不要なのでしょうか

Socketの文献をいろいろ読んだのですが、POSTについての情報がどこも少なく
(英文は読んでませんが)
いろいろとお尋ねしてお手数をおかけします。

No. 2246 # 68user 2001/11/03 (土) 19:14:11
>>2232 名無しさん
ご指摘ありがとうございます。どうやってわかりやすく説明するかは
非常に悩むところですね。autoflush は「存在自体あまり知られてない」
という痛い欠点があり、難しいところです。次回更新時に何かしら
わかりやすい解説を書きたいと思っています。

>>2235 H-Hash
> このたび、RFC2616の日本語訳のURLが
> http://www.studyinghttp.net/rfc_ja/2616/ に変更いたしました。
ご連絡ありがとうございます。修正いたしました。

>>2236 Ka23
> UNIX プログラミング FAQのサイトが
> http://www.adl.rd.nacsis.ac.jp/~moro/unix-programmer/faq-j_toc.html
> に移転しているようです。
こちらもありがとうございます。後ほど修正しておきます。


>>2243 sio
test.cgi は同じサーバにあるのですか? で、ブラウザから直接呼び出すこと
はないのですか? ならば CGI じゃなくてただのスクリプトですので、
main.cgi からは

    open(IN, "/foo/bar/test.cgi ID |");
と呼び出せばいいでしょう。ソケットを使う必要はありません。

もし test.cgi が同じサーバにあって、これまでは CGI として動いていたけ
ど、これからはブラウザから直接参照させたくない、ということならば、
    $ENV{REQUEST_METHOD}='GET';
    $ENV{QUERY_STRING}='data=1';
    open(IN, "/foo/bar/test.cgi |");
と、WWW サーバの代わりに適切な環境変数をセットしてからスクリプトを実行
してやればよいでしょう。


test.cgi が別サーバにあるならば、直接スクリプトを実行することはできな
いので、そのときはソケットを使いましょう。

> print SOCKET "POST $file HTTP/1.0\r\n";
> print SOCKET "Content-Length: $len" . "\r\n\r\n";
> print SOCKET "$query";
送ったはいいけど、これでは結果を受け取っていませんし、ブラウザに何も表
示していません。

      while (<SOCKET>){ # ヘッダを捨てる
          m/^\r\n$/ and last;
      }
      print "Content-type: text/html\n\n";
      while (<SOCKET>){ # ボディのみ表示
          print $_;
      }

とかいうのをこの後に付けて下さい。

> POSTについての情報がどこも少なく
あまり書くことがないからでしょう。気を付けるのはContent-length を付け
ること、くらいじゃないでしょうか。


あと、CGI 経由で HTTP クライアントを開発するのはやめましょう。まずはコ
マンドラインから動くような HTTP クライアントを作り、完成したら CGI 経
由でも動くように改造しましょう。でないと、問題の切り分けが非常に面倒に
なります。

Prev< No. 2245〜2246> Next  [最新発言に戻る] [過去ログ一覧]