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