2

学校のプロジェクト用に http サーバーを作成していて、CGI スクリプトを実行しようとしています。次のコードは cgi プログラムを正常に実行し、プログラムの出力はブラウザーに送信されますが、POST されたデータの送信方法に問題があります。これが私が持っているものです:

    int p[2];
    pipe(p);

    int pid = fork();

    if (pid == 0) {
        close(p[1]);

        dup2(p[0], STDIN_FILENO);
        dup2(socket, STDOUT_FILENO);

        execve(path.c_str(), {}, (char**) &env[0]);
    } else {
        close(p[0]);

        string body = req->getBody();
        write(p[1], body.c_str(), body.size());

        close(socket);
    }

CGI を正しく理解していれば、HTTP_CONTENT_LENGTH 環境変数を設定し (これを行っています)、要求本文を stdin に送信するだけです。私はパイプ、dup2 を使用しており、それを行う正しい方法を書いていますか?

テスト PHP スクリプトに投稿すると、$_POST 配列が空になります。テスト用の perl スクリプトに投稿すると、まったく応答が送信されなかったり、実行が終了したりしません。もっとstdinを待っていると思います。私のパイピングと dup2ing に明らかな問題がなければ、問題を説明するコンパイル可能なテスト コードを投稿します。

ありがとうございました!

4

1 に答える 1

0

パイピングと dup2ing はすべて問題ありません。私の問題は私の CGI 環境変数でした。勝者の環境変数は CONTENT_LENGTH で、接頭辞 HTTP_ はありません。

于 2013-02-05T20:55:17.410 に答える