4
我目前正在使用Apache和mod_fcgid使用FastCGI的Web C++应用程序。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();
}
但实际上,我不使用线程。请求被一个接一个地执行。
如何获取请求标头?
谢谢。
fcgiRequest-> envp是获取它们的正确位置。你发布了所有的环境变量吗?应该有一堆以HTTP_开头的HTTP头文件。如果这些都是你得到的,也许你在处理它们的方式上有一个错误。你可以在处理envp的地方发布代码吗? – Eelke