FastCGI: récupérer les en-têtes de requête

Je travaille actuellement sur une application Web C ++ utilisant FastCGI avec Apache et mod_fcgid.

J’essaie de récupérer les en-têtes d’une demande, mais je n’ai pas trouvé comment le faire. Après quelques recherches, je pensais que les en-têtes se trouvaient dans l’atsortingbut «envp» de «FCGX_Request», mais il contient des variables d’environnement telles que:

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: 
Apache/2.2.21 [etc.]

Ces variables me fournissent des informations utiles, mais j’ai besoin des véritables en-têtes HTTP, et plus particulièrement de “Cookie”. J’ai essayé de lire sur le stream “in” de “FCGX_Request” mais cela semble être pour le corps de la requête (données POST). Comme mon application est destinée à être multi-threadée, j’utilise “FCGX_Accept_r ()”, comme ceci:

 while(true) { FCGX_Init(); FCGX_Request* fcgiRequest = new FCGX_Request; FCGX_InitRequest(fcgiRequest, 0, 0); if(FCGX_Accept_r(fcgiRequest) process(); } 

Mais en réalité, je n’utilise pas de threads. Les demandes sont exécutées les unes après les autres.

Comment puis-je obtenir les en-têtes de demande?

Je vous remercie.

Essayez le code suivant. Il convient d’imprimer tout l’environnement pour que vous puissiez trouver la variable que vous recherchez.

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