基本CGI协议的格式。例子

时间:2011-05-21 02:04:40

标签: c++ c cgi cgi-bin

我正在写一个C CGI程序

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

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

指向一个冗长的RFC是无益的。

任何书?我特别感兴趣的是该协议的低级细节。我已经知道如何使用帮助程序库编写CGI应用程序...我只需要知道这些帮助程序库的语义。

1 个答案:

答案 0 :(得分:3)

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

除了这个细节之外,你可能会 来查看RFC,我担心。在Google上搜索RFC3875应该找到它。

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

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

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