Apache的mod_fcgi将所有客户端http头放在您传递到FCGX_Accept(服务器应用程序的主循环)的“FCGX_ParamArray”中。该类型仅仅是一个char **,其字符串的常用模式为“名称,值,名称...”。所以,你只需要像这样的循环,让他们都:
std::map<std::string, std::string> hdrs;
std::string name = 0;
char* val = 0;
int i;
// "envp" is the FCGX_ParamArray you passed into FCGX_Accept(...)
for(i=0; envp[i] != NULL; i+=2) {
name = envp[i];
val = envp[i+1];
if(val != NULL) {
hdrs[name] = string(val);
}
else {
hdrs[name] = "";
}
}
如果你使用Apache,并希望访问所有静态配置(“httpd.conf文件”)设置为好,他们通过在main()的“arge”环境块中。
int main(int argc, char** argv, char** arge) {
....
}
请注意,并非所有的客户端都会发送所有可能的头文件 - 例如,CURL不会发送“接受”头文件。
请注意:当且仅当该标题字段的整个字段值被定义为以逗号分隔的列表时,“消息中可能存在具有相同字段名的多个消息标题字段[即#(values )“。 (参见[RFC2616](http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.2))。因此你应该使用[std :: unordered_multimap](http://en.cppreference.com/w/cpp/container/unordered_multimap),作为[std :: map](http://en.cppreference.com/w/ cpp/container/map)键是唯一的。 – Phidelux 2017-09-19 14:48:29