C++ 编程作为一系列问题/CGI 脚本程序
外观
/* 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 页面将以更少的努力给出相同的结果。
<!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 输入拆分为名称/值对列表的棘手部分。
- 来自 http://www.jmarshall.com/easy/cgi/getcgi.c.txt 的 getcgivars.c
- ... 其他 C 和 C++ 中的 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 来测试它。
- the GET Wikibook 从用户方面查看 CGI 脚本
- “万维网安全常见问题解答”:CGI(服务器)脚本
- "CGI Made Really Easy: or, Writing CGI scripts to process Web forms",作者 James Marshall。
- 许多人更喜欢用 Perl (Perl 编程/CGI)、PHP (PHP 编程)、Rebol (Rebol 编程) 等编写 CGI 脚本。
- 维基百科:通用网关接口
- 维基百科:查询字符串