2012-01-23 4 views
4

현재 Apache와 mod_fcgid와 함께 FastCGI를 사용하는 Web C++ 응용 프로그램을 작성 중입니다.FastCGI : 요청 헤더를 검색하십시오.

요청의 헤더를 가져 오려고하지만 요청 방법을 찾지 못했습니다. ,

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 헤더가 필요합니다 : 일부 연구 후에, 나는 헤더가 "FCGX_Request"의 속성 "envp는"있는 줄 알았는데,하지만 같은 환경 변수를 포함 특히 "쿠키". "FCGX_Request"의 "in"스트림을 읽으려고했으나 요청 본문 (POST 데이터) 인 것으로 보입니다.

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

을하지만 실제로, 나는 스레드를 사용하지 않는 : 내 응용 프로그램이 될 것입니다으로 같이, 나는 "FCGX_Accept_r()"를 사용, 멀티 스레드. 요청은 차례로 실행됩니다.

어떻게 요청 헤더를 얻을 수 있습니까?

감사합니다.

+1

fcgiRequest-> envp는 적절한 장소입니다. 당신이 얻은 모든 환경 변수를 게시 했습니까? HTTP 헤더로 시작하는 HTTP_로 시작하는 묶음이 있어야합니다. 그것들이 전부라면 어쩌면 당신이 처리하는 방식에 버그가있을 수 있습니다. envp를 처리하는 코드를 게시 할 수 있습니까? – Eelke

답변

6

다음 코드를 시도해보십시오. 찾고있는 변수를 찾을 수 있도록 전체 환경을 인쇄해야합니다.

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(); 
} 
관련 문제