c/c++语言开发共享获取FastCGI中的所有客户端头文件(C / C ++)

目前我有点问题:
我想为nekoVM创建FastCGI / CGI绑定。 这是通过编写VM加载的一些线索C / C ++代码来完成的。 我想使我的绑定行为尽可能与neko本机API(mod_neko,mod_tora)兼容。 使用mod_neko,可以获取客户端发送的所有HTTP头。
据我所知,只有通过调用getenv('header_name')才能获得FastCGI的HTTP头。 要使用此function,您需要知道所有标题的名称。

我的问题:是否有可能获得客户端发送的所有标头?

    您可以在大多数系统上使用外部定义的,以null结尾的environ变量来获取所有环境变量的数组,您可以迭代以获取所需的标头(假设FastCGI以合理的方式设置环境变量):

     #include  int main(int argc, char *argv[]) { extern char **environ; for (int i = 0; environ[i] != NULL; i++) { printf("%sn", environ[i]); } } 

    见man 7 environ 。

    Apache的mod_fcgi将所有客户端http头放在您传递给FCGX_Accept(服务器应用程序的主循环)的“FCGX_ParamArray”中。 该类型只是一个char **,字符串的常用模式为“name,value,name,…”。 所以,你只需要一个像这样的循环来得到它们:

      std :: map  hdrs;   std :: string name = 0;  char * val = 0;  int i;   //“envp”是您传入FCGX_Accept(...)的FCGX_ParamArray   for(i = 0; envp [i]!= NULL; i + = 2){            name = envp [i];                          val = envp [i + 1];                                      if(val!= NULL){                            hdrs [name] = string(val);            }      其他{          hdrs [name] =“”;      }                               }                                      

    如果您正在使用Apache并且想要访问所有静态配置(“httpd.conf”)设置,那么它们将被传递到main()的“arge”环境块中。

      int main(int argc,char ** argv,char ** arge){      ....  } 

    请注意,并非所有客户端都会发送所有可能的标头 – 例如,CURL不会发送“接受”标头。

      以上就是c/c++开发分享获取FastCGI中的所有客户端头文件(C / C ++)相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/560623.html

      (0)
      上一篇 2021年1月28日
      下一篇 2021年1月28日

      精彩推荐