无法从代理到应用程序获取QUERY_STRING

时间:2016-06-30 19:17:16

标签: c nginx fastcgi

当我将表单数据发送到我的服务器时,除了QUERY_STRING之外,我的fastcgi应用程序能够从nginx中读取每个参数。查看CONTENT_LENGTH会给出字符串的正确长度,我的浏览器会显示正在发送的数据,因此我只能认为某些内容未设置或我正在查找错误的位置。

我的位置文件:

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");
}

我知道我需要解析字符串,但我只是想在第一时间获取字符串,正如我所说,我可以打印出REQUEST_METHOD和其他几个参数,而不是QUERY_STRING。

1 个答案:

答案 0 :(得分:1)

在正常POST中,数据不在QUERY_STRING中,而是通过stdin传递给CGI进程。看看FCGX_Request.in

如果您的网址中包含?a=b 也可以拥有QUERY_STING,但这对于POST来说并不正常。