2016-06-30 5 views
2

QUERY_STRING以外のサーバーにデータをPOSTすると、fastcgiアプリケーションはnginxからすべてのパラメータを読み取ることができます。 CONTENT_LENGTHを見ると文字列の長さが正しく表示され、ブラウザに送信されるデータが表示されるので、何かが設定されていないと思ったり、間違った場所を探しているだけです。プロキシからアプリケーションにQUERY_STRINGを取得できません

私の場所のファイル:

location /testpage/test { 
    include fastcgi_params; 
    proxy_set_header X-Real-IP $remote_addr; 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    proxy_set_header Host $http_host; 
    proxy_set_header X-NginX-Proxy true; 

    fastcgi_pass unix:/var/run/fcgi-sock.fcgi; 
    fastcgi_param SCRIPT_FILENAME /www/test-app; 
} 

私のテストのアプリ:

#include "/usr/local/include/fcgiapp.h" 

int main() 
{ 
    FCGX_Request request; 

    FCGX_Init(); 
    FCGX_InitRequest(&request, 0, 0); 
    while (FCGX_Accept_r(&request) == 0) 
    { 
     FCGX_FPrintF(request.out, "Content-type: text/html\r\n\r\n <h1>Hello World!</h1>"); 

     char* q=FCGX_GetParam("REQUEST_METHOD",request.envp); 
     if(q) FCGX_FPrintF(request.out, "%s", q); 
     else FCGX_FPrintF(request.out, "nope"); 

     q=FCGX_GetParam("QUERY_STRING",request.envp); 
     if(q) FCGX_FPrintF(request.out, "%s", q); 
     else FCGX_FPrintF(request.out, "nope"); 
} 

として、私は文字列を解析する必要があります知っているが、私はちょうど最初の場所で文字列を取得したいと私私はQUERY_STRINGではなく、REQUEST_METHODといくつかの他のパラメータを印刷することができます。

+0

あなたのURLは何ですか? –

答えて

1

通常のPOSTでは、データはQUERY_STRINGにはありませんが、代わりにstdinを介してCGIプロセスに渡されます。 FCGX_Request.inを見てください。

にURLが?a=bの場合はQUERY_STINGもありますが、これはPOSTでは正常ではありません。

+0

私はそれを知っていたはずです。フォームデータではなく、今はゴミが印刷されているのがわかります。私はそれを解析していないと仮定し、iirc、ターミネーターさえない? FCGX_FPrintF(request.out、 "%s"、request.in); – Rob

+0

あなたはCONTENT_LENGTHを持っています - あなたがEOFを受け取ったかどうかわかりませんが、ターミネーターはいけません。 Request.inは文字列ではなく、ストリームです。 FILE * –

+0

のように使用します。私のコメントを編集しました。それは正しく見えますか?要求は、私はかなりの問題を解決していないが、私は忘れていた基本的なプラスいくつかの新しいものを修正してFCGX_InitRequestで初期化(&リクエスト) – Rob

関連する問題