跳转到内容

C++ 编程作为一系列问题/CGI 脚本程序

来自 Wikibooks,为开放世界提供开放书籍

简单脚本

[编辑 | 编辑源代码]
/* cgi_hello.cpp
public domain
NB: tested code.
*/
#include <iostream>

using namespace std;

void send_CGI_header(){
    cout << "Content-type: text/html\n";
    cout << "\n"; // this blank line is a necessary part of the CGI protocol.
}
void send_contents(){
    cout << "<!doctype html>\n";
    cout << "<html>\n";
    cout << "<title>Hello</title>\n";
    cout << "<p>Hello, world!\n";
    // C strings can, with care, contain double-quote characters, newlines, etc.
    cout << "<p><a href=\"http://validator.w3.org/check?uri=referer\">";
    cout << "Valid.</a>\n";
    cout << "</html>\n";
    cout << endl;
}

int main(){
    send_CGI_header();
    send_contents();
    return 0;
}

将此源代码编译成一个名为“test_script.cgi”的可执行文件。

几乎所有 Web 服务器都支持通用网关接口。以下是一些关于如何在 Apache 服务器上放置用 C++ 编写的 CGI 脚本的简要说明;其他 Web 服务器类似。有关更多详细信息,请参阅 Apache wikibook,第 ... 节,或您最喜欢的 Web 服务器的类似文档。

... 安全隐患:用户“nobody”...

CGI 脚本用于处理表单数据提交。以下是一个示例 HTML 文件,它允许用户将数据提交给“test_script.cgi”程序。

<!-- test_form.html -->
<html>
 <form action="test_script.cgi" method="get">
   Favorite animal: <input name="favorite_animal" type="text" />
   <input type="submit" />
 </form>
</html>

将编译后的“test_script.cgi”放在相应的“cgi-bin”目录中。将“test_form.html”放在某个方便的位置 - 通常是同一服务器上的另一个目录,但它也可以在其他服务器上或您本地机器上的文件。调整“action”属性以给出 CGI 脚本的路径。

启动您最喜欢的 Web 浏览器,并将它指向“test_form.html”。单击提交按钮。CGI 脚本的输出应显示出来。单击“有效”链接。

静态 HTML

[编辑 | 编辑源代码]

上面的脚本始终给出相同的输出 - 如果这确实是您想要的,那么一个简单的静态 HTML 页面将以更少的努力给出相同的结果。

<!doctype html>
<!-- static_hello.html -->
<html>
<title>Hello</title>
<p>Hello, world!
<p><a href="http://validator.w3.org/check?uri=referer">Good.</a>
</html>

CGI 脚本的强大之处在于它可以做静态 HTML 页面无法做到的事情。

获取脚本输入

[编辑 | 编辑源代码]

已经有多个库可用于处理将 CGI 输入拆分为名称/值对列表的棘手部分。


/* cgi_hello.cpp
public domain
WARNING: untested code.
*/
...
int main(){
    send_CGI_header();
    send_contents();
    return 0;
}

CGI 脚本不使用命令行参数“argc”或 argv”。相反,它从环境变量中获取输入 - 并且,在 HTTP PUT 或 HTTP POST 的情况下,程序从标准输入读取用户提交的数据。

将此源代码编译成一个名为“test_script.cgi”的可执行文件。使用相同的 test_form.html 来测试它。

进一步阅读

[编辑 | 编辑源代码]
华夏公益教科书