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