【问题标题】:Passing HTML form data to C script and CGI standard behavior将 HTML 表单数据传递给 C 脚本和 CGI​​ 标准行为
【发布时间】:2018-11-15 13:52:01
【问题描述】:

我正在尝试用 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:好的,我在 stackoverflow 上的 cgi 标签下回答了之前回答的问题。

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

但它仍然不清楚我在这里问的一些事情。

由于 RFC3875 只是一个参考文档,并且没有最终标准。

  1. 谁实现了 CGI 协议?谁在 Apache 等服务器上定义其“标准行为”。

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

【问题讨论】:

  • 如果您不使用 CGI,您的代码是如何运行的?
  • @SLaks 我很欣赏这个讽刺,但你能详细说明一下吗?另外,我更新了问题。
  • CGI 表示 Web 服务器启动您的代码(无论是解释的还是编译的),通过标准输入传递请求,并期望通过标准输出得到响应。
  • @SLaks 谁和什么描述了它的“定义行为”?既然我用的是apache,那么是apache的CGI协议实现吗..是我用的吗?

标签: html c cgi


【解决方案1】:

试图帮助你有点困难。您的问题,特别是“我试图完全避免使用 CGI”的陈述意味着您缺少概念性概述。为了“避免 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;
}

【讨论】:

  • 你能回答我编辑的两点吗?理论上的答案对我来说就足够了,我会接受你的回答来结束这个问题。
  • 奇怪,我似乎无法标记你
  • 在这种情况下谁将成为实施者?对不起,我没听懂你说的。
  • 实施者是任何编写软件的人。很抱歉你不理解我,但也许这会让你明白:我不知道编写 Apache、Perl CGI 模块或编写微型 httpd 的人的名字,但这些是实现者.
  • 对于 perl,有 CGI.pm 模块,当您安装 perl(包括 CGI.pm)时,它驻留在您的计算机上。这定义了 CGI 的“标准行为”。就我而言,我想知道 CGI 文件实际位于何处。在阿帕奇里面?它的标准行为是什么?
猜你喜欢
  • 1970-01-01
  • 2016-03-13
  • 1970-01-01
  • 2011-03-29
  • 2013-12-12
  • 2013-04-28
  • 1970-01-01
  • 1970-01-01
  • 2011-05-20
相关资源
最近更新 更多