FastCGI:检索请求头

FastCGI: retrieve the request headers

本文关键字:请求 检索 FastCGI      更新时间:2023-10-16

我目前正在开发一个Web C++应用程序,该应用程序使用带有Apache和mod_fcgid的FastCGI。

我正在尝试检索请求的标头,但我没有找到如何检索。经过一些研究,我认为标头在"FCGX_request"的属性"envp"中,但它包含环境变量,如:

REMOTE_ADDR: 192.168.0.50
SERVER_SOFTWARE: Apache/2.2.21 (Unix) mod_ssl/2.2.21 OpenSSL/1.0.0f DAV/2 mod_fcgid/2.3.6
REDIRECT_UNIQUE_ID: TxytP38AAAEAABpcDskAAAAE
FCGI_ROLE: RESPONDER
HTTP_ACCEPT_LANGUAGE: fr
SERVER_SIGNATURE: <address>Apache/2.2.21 [etc.]

这些变量为我提供了有用的信息,但我需要真正的HTTP头,尤其是"Cookie"。我试图读取"FCGX_Request"的流"in",但它似乎是针对请求体(POST数据)的。由于我的应用程序是多线程的,所以我使用"FCGX_Accept_r()",如下所示:

while(true)
{
    FCGX_Init();
    FCGX_Request* fcgiRequest = new FCGX_Request;
    FCGX_InitRequest(fcgiRequest, 0, 0);
    if(FCGX_Accept_r(fcgiRequest) < 0)
        break;
    Request* request = new Request(fcgiRequest);
    request->process();
}

但实际上,我不使用线程。请求一个接一个地执行。

如何获取请求标头?

谢谢。

尝试以下代码。它应该打印出整个环境,这样你就可以找到你要找的变量。

while(true)
{
    FCGX_Init();
    FCGX_Request* fcgiRequest = new FCGX_Request;
    FCGX_InitRequest(fcgiRequest, 0, 0);
    if(FCGX_Accept_r(fcgiRequest) < 0)
        break;
    char **env = fcgiRequest->envp;
    while (*(++env))
        puts(*env);

    Request* request = new Request(fcgiRequest);
    request->process();
}