68user's page 掲示板

Prev< No. 2245〜2250> 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 経
由でも動くように改造しましょう。でないと、問題の切り分けが非常に面倒に
なります。

No. 2247 # sio 2001/11/04 (日) 08:58:47
68userさんありがとうございます。
やりたい事が全てご指摘通りです(^^;

open関数のパイプの使い方すら知りませんでした。
今やっと説明されているページを見つけ
http://www.kt.rim.or.jp/~kbk/perl5.005/perlipc.html
勉強中です。

Socketについてもようやく理解できました。
データを受け取った側で、ブラウザ処理をしようとするから
訳が分からなくなっていたようです。

今日はperlに浸かり勉強する日にします p(..)

No. 2248 # 初心者 [E-mail] 2001/11/05 (月) 07:45:11
X Window Systemを立ち上げるときに、

(**) stands for supplied (--) stands for probed/default values
(**) ...
(**) ...

というメッセ-ジが出て立ち上げることができません。
これはいったいどういうことなのでしょうか。

No. 2249 # 初心者 [E-mail] 2001/11/05 (月) 08:06:53
正確には

(**) stands for supplied, (--) stands for probed/default values
(**) ...
(**) ...

でした。

No. 2250 # 68user 2001/11/05 (月) 10:26:23
>>2247 sio
> データを受け取った側で、ブラウザ処理をしようとするから
> 訳が分からなくなっていたようです。
まず、全体の構成を見直すべきでしょうね。
    - main.cgi に統合する。
    - test.cgi はユーザ名を引数で受け取り、ログイン可能なら
        戻り値 0 を、ログイン不可なら戻り値 1 を返す。
などと現在の仕様を比べ、一番良さそうなものを採用しましょう。

>>2249 初心者
> (**) stands for supplied, (--) stands for probed/default values
それは起動時に (成功・失敗にかかわらず) 必ず表示されるメッセージです。

また、OS などの環境が何も書いていないので、答えられる人は
いないでしょう。

# 僕は XFree86 やらビデオカードやらには詳しくないので、
# 書いてもらっても答えられないかもしれませんが。

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