gpt4 book ai didi

c++ - 基本 CGI 协议(protocol)的格式。例子

转载 作者:太空宇宙 更新时间:2023-11-04 02:17:04 26 4
gpt4 key购买 nike

我正在写一个C CGI程序

对于 GET 请求,我假设所有信息都以某种方式存储在 getenv() 中。我的问题是,这个数组看起来像是来自网络服务器的最基本的 CGI 请求。有两个参数,例如用户名= 和密码=。

对于 POST 请求,我不确定。我读过,这些东西是在标准输入上处理的。通过标准输入(来自网络服务器)传递给 CGI 程序的这些行是什么样的?

向我指出冗长的 RFC 没有帮助。

有什么书吗?我对协议(protocol)的底层细节特别感兴趣。我已经知道如何使用辅助库编写 CGI 应用程序...我只需要知道这些辅助库的语义即可。

最佳答案

envp 不是标准的(好吧,不是 ISO C 或 C++ 标准,尽管 POSIX 可能有一些东西)。

然而,envpargv 的格式几乎相同,除了它没有控制 argc 来限制它。

每个 envp[x] 都是 "key=value" 的形式,其中 key 是环境变量名称,value 是它的值,令人惊讶的是:-)

您应该按顺序处理元素,直到获得 NULL 指针,例如:

#include <stdio.h>
int main (int argc, char *argv[], char *envp[]) {
int i = 0;
while (envp[i] != NULL)
printf ("[%s]\n", envp[i++]);
return 0;
}

Wikipedia entry for CGI提供了更多详细信息,希望不会像冗长的 RFC 那样用太多信息淹没您。

复制相关内容使这个答案独立:

  • 服务器特定变量:
    • SERVER_SOFTWARE — HTTP 服务器的名称/版本。
    • SERVER_NAME — 服务器的主机名,可以是点十进制 IP 地址。
    • GATEWAY_INTERFACE — CGI/版本。
  • 请求特定变量:
    • SERVER_PROTOCOL — HTTP/版本。
    • SERVER_PORT — TCP 端口(十进制)。
    • REQUEST_METHOD — HTTP 方法的名称(见上文)。
    • PATH_INFO — 路径后缀,如果在程序名称和斜线之后附加到 URL。
    • PATH_TRANSLATED — 如果存在 PATH_INFO,则服务器假定的相应完整路径。
    • SCRIPT_NAME — 程序的相对路径,例如/cgi-bin/script.cgi。
    • QUERY_STRING — URL 之后的部分?特点。当用于提交通过 HTML 应用程序/x-www-form-urlencoded 定义的 GET 方法传输的表单数据时,可以由 *name=value 对组成,并用 & 符号分隔(例如 var1=val1&var2=val2…)。
    • REMOTE_HOST — 客户端的主机名,如果服务器未执行此类查找,则不设置。
    • REMOTE_ADDR — 客户端的 IP 地址(点十进制)。
    • AUTH_TYPE — 身份识别类型(如果适用)。
    • REMOTE_USER 用于某些 AUTH_TYPE。
    • REMOTE_IDENT — 仅在服务器执行此类查找时查看身份。
    • CONTENT_TYPE — 如果使用 PUT 或 POST 方法,输入数据的 MIME 类型,通过 HTTP header 提供。
    • CONTENT_LENGTH — 同样,输入数据的大小(十进制,以八位字节为单位)(如果通过 HTTP header 提供)。
    • 用户代理传递的变量(HTTP_ACCEPT、HTTP_ACCEPT_LANGUAGE、HTTP_USER_AGENT、HTTP_COOKIE 和可能的其他变量)包含相应 HTTP header 的值,因此具有相同的含义。

除了详细程度之外,恐怕您必须查看 RFC。在 Google 上搜索 RFC3875 应该可以找到它。

具体来说,对于POST,环境变量包含在请求的第一个空行(引入消息正文的行)之前。它们具有以下形式:

Content-Type: application/wonderful_app_by_pax
Content-Length: 314159

其中键不区分大小写,值在冒号后。

关于c++ - 基本 CGI 协议(protocol)的格式。例子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6079154/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com