(本文为博闻网版权所有,转载必须注明出处。)

我们已了解到CGI脚本的创建过程相当简单。Web服务器执行放置在cgi-bin目录中的任何可执行程序,并且可执行程序发送给 stdout的任何输出都将出现在调用该脚本的浏览器中。现在,我们需要找到一种用于将输入发送到脚本的方法。发送输入的一般方法是使用HTML表单。

表单在网络上随处可见。可以接受内容输入的任何页面都是表单。您可以在搜索引擎、留言簿、问卷等上面看到这些表单。您在HTML页上创建表单,并在表单的HTML标记中指定CGI脚本的名称,当用户单击表单上的Submit按钮时将调用该脚本。用户输入到表单中的值将会进行打包并发送到CGI脚本,这样脚本就可以随意使用这些值。

实际上,上述情况是很常见的,只是您可能没有意识到而已。例如,转到 http://www.lycos.com,在“Search for:”框中键入“test”一词并按“Go Get It!”按钮。结果页的 URL 类似于下面这样:

您会发现Lycos主页就是一个表单。Lycos在cgi-bin目录中有一个名为pursuit的脚本。表单会向此脚本发送五个参数:

  1. matchmode=and
  2. cat=lycos
  3. query=test
  4. x=10
  5. y=9
第三个参数正是我们输入的搜索字符串。其他四个参数也为脚本提供了一些信息。CGI脚本在Lycos数据库中查询“test”一词,然后返回结果。这就是任何搜索引擎的核心!

让我们创建一个简单的表单进行试验。创建一个名为simpleform.htm的文件,然后在其中输入以下 HTML:

可以单击此URL进行试验:http://www.howstuffworks.com/simpleform.htm

您可以看到,HTML代码指定创建一个使用GET方法的表单,并将该方法发送给http://www.howstuffworks.com/cgi-bin/simpleform.cgi上的CGI脚本。该表单内包含一个文本输入区域以及标准的“Submit”和“Reset”按钮。

该表单引用的文件http://www.howstuffworks.com/cgi-bin/simpleform.cgi是一个C程序。它开始是作为一段C代码放置在名为simpleform.c的文件中:

使用以下命令对这段代码进行编译:

然后,将其放置在cgi-bin目录中。此程序只是收集表单发送的值并显示出来。例如,您可能会看到以下内容:

Name是表单中的文本输入字段的标识符(表单上的每个输入字段都应具有唯一的标识符),John+Smith是可能在表单上输入的典型姓名。请注意,“+”将替换空白字符。

通过本示例,您可以看出设置表单并将表单中的数据发送到CGI脚本中的基本过程是相当简单的。有几个细节需要注意:

  • 表单上的每个输入字段应具有唯一的标识符。
  • 表单需要使用GET或POST方法。使用GET方法的好处是,您可以在发送给脚本的URL中查看表单的值,从而使调试更简单。
  • 由于对可以通过GET方法发送的字符数目存在一定的限制,因此对于大型表单,应优先使用POST方法。
  • 使用GET方法发送的数据可以通过查看QUERY_STRING环境变量(通常使用 C 语言程序中的getenv函数和PERL中的$ENV工具读取)接收。使用POST方法发送的数据可以通过STDIN(使用C语言程序中的gets或PERL中的 ead)获取。
  • 发送的数据会将所有字段串接在一个字符串中,并将替换许多字符,因此需要进行转换。例如,所有空白将替换为加号。

提到QUERY_STRING环境变量,有必要在此大致介绍一下环境变量。您可以在CGI 脚本中看到大量环境变量,其中包括:

  • AUTH_TYPE
  • CONTENT_LENGTH
  • CONTENT_TYPE
  • GATEWAY_INTERFACE
  • HTTP_ACCEPT
  • HTTP_USER_AGENT
  • PATH_INFO
  • PATH_TRANSLATED
  • QUERY_STRING
  • REMOTE_ADDR
  • REMOTE_HOST
  • REMOTE_IDENT
  • REMOTE_USER
  • REQUEST_METHOD
  • SCRIPT_NAME
  • SERVER_NAME
  • SERVER_PORT
  • SERVER_PROTOCOL
  • SERVER_SOFTWARE

这些环境变量中隐藏了许多有用的信息,其中包括输入字符串的长度 (CONTENT_LENGTH)、使用的METHOD(GET 或 POST -- REQUEST_METHOD可让您清楚是在STDIN 中还是在QUERY_STRING中查找输入)、用户计算机的IP地址 (REMOTE_ADDR),等等。有关这些变量的完整说明,请参阅CGI环境变量

    The value entered was:Name=John+Smith
    gcc simpleform.c -o simpleform.cgi
#include 
#include 

int main()
{
  printf("Content-type:text/htmlnn");
  printf("n");
  printf("n");
  printf("
        
    The value entered was:")
printf("%s
n", getenv("QUERY_STRING"));
printf("n");
printf("n");
return 0;
}

A super-simple form
Enter Your Name:
http://www.lycos.com/cgi-bin/pursuit?matchmode=and andcat=lycosandquery=testandx=10andy=9



 打印  电子邮件  反馈  引用
编辑推荐
软件狗是什么?
软件狗(Software Dog)是一种计算机软件的加密方式,是“硬件加密锁”的
间谍软件工作原理
您的计算机是否曾变得非常慢,即使打开Word处理器也会占用很长时间,间谍软件可能
什么是路由算法?
路由器是管理网络流量和发送数据包的,但是它是如何决定数据包发送的呢?通过本文,博
Gnutella文件共...
Napster在巅峰时期或许是有史以来最受欢迎的网站。紧随其后的文件共享体系架构
主页 |  公司信息 |  广告服务 |  招聘信息 |  隐私 |  联系我们 |  帮助 |  条款和条件