我目前正在使用 FastCGI 与 Apache 和 mod_fcgid 开发 Web C++ 应用程序。
我正在尝试检索请求的标头,但我没有找到如何执行此操作。经过一番研究,我认为标头位于“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();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)