将 HTML 表单数据传递给 C 脚本和 CGI​​ 标准行为

Passing HTML form data to C script and CGI standard behavior

我正在尝试用 C 编写登录脚本。我想知道如何将 HTML 表单数据传递到我的后端 C 脚本。我是 C 的新手(来自 perl)

就这么干?

<form action="test.c"> or <form action="test.a"> 

脚本如何明确区分用户名和密码?早些时候,我只需要这样做(在 perl 中):

$username = $cgi->param("username");

我现在如何在 C 中执行此操作。我试图完全避免使用 CGI。

编辑 1:

  1. 看来我也需要知道,CGI 的基本工作原理(简而言之)。我猜,浏览器是一种 CGI 编译器?如果不是,那么它是 apache 吗?

  2. 既然C不是解释型语言,那么CGI如何与C协同工作呢?在 perl 中,我可以简单地做:

    #!/usr/bin/perl
    print "Content-type: text/html\n\n";
    print "Hello, World.";
    

我如何在 C 中执行此操作?

Edit2:好的,我转到了之前在 Whosebug 上的 cgi 标签下回答的问题。

这似乎是投票最多的:What is Common Gateway Interface (CGI)?

但它仍然没有清除一些我在这里问的事情。

由于RFC3875只是一个信息文档,并没有最终的标准。

  1. 谁实现了CGI协议?谁在Apache等服务器上定义了它的"standard behavior"。

  2. C 文件如何在现代环境中与 CGI 一起工作。请详细说明使用 "Hello World!" 作为对表单提交的回复。

想帮你有点难。您的问题,尤其是语句 "I'm trying to avoid using CGI at all" 暗示您缺少概念性概述。为了 'avoid CGI' 你需要用一种机制来代替它来接收、解析和响应 HTTP 请求。这意味着(可能)编写一个 HTTP 服务器。 C是一种编译语言。当你想知道你是否可以做 action="test.c" 它告诉我你忽略了 C 不是解释语言的事实。

您可以使用 tiny httpd 之类的东西来开始。

这个关于 cgi using C 的站点将为您提供帮助。 CGI 的实现方式最终由实现者自行决定。一个 hello world 程序就像

的编译可执行文件一样简单
#include <stdio.h>
int main(void) {
  printf("Content-Type: text/plain;charset=us-ascii\n\n");
  printf("Hello world\n\n");
  return 0;
}