`

C语言CGI程序 POST表单处理

阅读更多
我们来看看到底如何从POST表单收集数据到CGI程序,下面給出了一個比较简单的C源代碼:     
    
 

 

#include<stdio.h>
#include<stdlib.h>    
#define MAXLEN 80    
#define EXTRA 5
/*   4个字节留给字段的名字"data",   1个字节留给"="   */
#define   MAXINPUT   MAXLEN+EXTRA+2 
/*   1个字节留给换行符,还有一个留给后面的NULL   */
#define DATAFILE "../data/data.txt"
/*   要被添加数据的文件   */

void   unencode(char   *src,   char   *last,   char   *dest)
{
 for(; src != last; src++, dest++)
  if(*src == "+")
   *dest = " ";
  else if(*src == "%") {    
   int   code;    
   if(sscanf(src+1,"%2x",&code)!=1)code="?";
   *dest=code;
   src   +=2;}
  else
   *dest=*src;
  *dest=" ";
  *++dest="";    
}    

int   main(void)    
{    
 char *lenstr;
 char input[MAXINPUT], data[MAXINPUT];
 long len;
 
 printf("%s%c%c", "Content-Type:text/html;charset=gb2312",13,10);
 printf("<TITLE>Response</TITLE>");

 lenstr=getenv("CONTENT_LENGTH");
 if(lenstr==NULL || sscanf(lenstr,"%ld",&len)!=1 || len>MAXLEN)
  printf("<P>表单提交错误");
 else{
  FILE *f;
  fgets(input,   len+1,   stdin);
  unencode(input+EXTRA,   input+len,   data);

  f =fopen(DATAFILE, "a");
  if(f == NULL)    
   printf("<P>对不起,意外错误,不能够保存你的数据");    
  else
   fputs(data,   f);    
  fclose(f);
  printf("<P>非常感谢,您的数据已经被保存<BR>%s",data);    
 }    
 return   0;    
}    

    
       从本质上来看,程序先从CONTENT_LENGTH环境变量中得到数据的字长,然后读取相应长度的字符串。因为数据内容在传输的过程中是经过了编码的,所以必须进行相应的解码。编码的规则很简单,主要的有这几条:     

1.   表单中每个每个字段用字段名后跟等号,再接上上这个字段的值来表示,每个字段之间的内容用&连结;    2.   所有的空格符号用加号代替,所以在编码码段中出现空格是非法的;    
3.   特殊的字符比如标点符号,和一些有特定意义的字符如“+”,用百分号后跟其对应的ACSII码值来表示。    

例如:如果用户输入的是:     
   
Hello   there!    

那么数据传送到服务器的时候经过编码,就变成了data=Hello+there%21   上面的unencode()函数就是用来把编码后的数据进行解码的。在解码完成后,数据被添加到data.txt文件的尾部,并在浏览其中回显出来。    

把文件编译完成后,把它改名为collect.cgi后放在CGI目录中就可以被表单调用了。下面给出了其相应的表单:    

<FORM   ACTION="/cgi-bin/collect.cgi"   METHOD="POST"   >
<P>请输入您的留言(最多80个字符):<BR>
<INPUT   NAME="data"   SIZE="60"   MAXLENGTH="80"   ><BR>
<INPUT   TYPE="SUBMIT"   VALUE="确定">
</FORM   >    
   
   
       事实上,这个程序只能作为例子,是不能够正式的使用的。它漏掉了很关键的一个问题:当有多个用户同时像文件写入数据是,肯定会有错误发生。而对于一个这样的程序而言,文件被同时写入的几率是很大的。因此,在比较正式的留言版程序中,都需要做一些更多的考虑,比如加入一个信号量,或者是借助于一个钥匙文件等。因为那只是编程的技巧问题,在这儿就不多说了。

分享到:
评论

相关推荐

    C语言写CGI程序详细教程

    CGI程序一般完成Web网页中表单(Form)数据的处理、数据库查询和实现与传统应用系统的集成等工作。 二、CGI接口标准 CGI接口标准包括标准输入、环境变量、标准输出三部分。 1.标准输入 CGI程序像其他可执行程序...

    用C语言进行CGI程序设计

    在本课程设计中,使用C语言编写CGI程序是为了实现一个特定的应用场景:通过网页表单收集用户输入的运算结果,并在后台处理这些数据,然后将结果返回给用户。 C语言被选择作为CGI程序的开发语言,主要得益于它的高效...

    用C语言技术进行CGI程序设计

    当用户提交表单或触发某种事件时,Web服务器会根据配置调用相应的CGI程序来处理请求,并将处理后的结果返回给用户。 **CGI接口标准**主要包括三个方面的内容:标准输入、环境变量和标准输出。 1. **标准输入**:...

    用C语言编写CGI程序

    下面是一个简单的C语言CGI程序示例,用于演示如何处理表单数据: ```c #include #include int main() { int i, n; printf("Content-type: text/plain\n\n"); if (getenv("CONTENT_LENGTH")) { n = atoi...

    用c语言进行cgi程序设计.rar_CGI程序设计_cgi_cgi c语言

    总的来说,通过C语言编写CGI程序,开发者可以创建高度定制化的Web应用程序,如表单处理、动态内容生成等。这个资源为初学者提供了一个实践CGI编程的机会,通过阅读和理解提供的代码,可以深入理解CGI的工作原理以及...

    cgi 接收post的数据

    在探讨“cgi接收post的数据”这一主题时,我们首先需要理解CGI(Common Gateway Interface,通用网关接口)的基本概念及其在Web服务器与外部应用程序之间的交互机制。CGI 是一种标准,它定义了Web 服务器如何与外部...

    C语言CGI编写WEB查询系统

    ### C语言CGI编写WEB查询系统 #### 一、CGI概述 公共网关界面(Common Gateway Interface,简称CGI)是一种编程规范,它定义了Web服务器如何与外部应用程序(即CGI程序)进行交互的标准接口。通过CGI,Web服务器...

    用C语言进行CGI程序设计.doc

    下面是一个简单的C语言CGI程序示例,它接收并输出HTML表单的数据: ```c #include #include int main() { int i, n; printf("Content-type:text/plain\n\n"); n = 0; if (getenv("CONTENT_LENGTH")) { n =...

    c语言 cgi 示例

    C语言CGI程序的核心部分通常包括以下步骤: 1. **环境变量解析**:CGI程序首先需要获取来自HTTP请求的环境变量,如QUERY_STRING(GET方法传递的参数)、REQUEST_METHOD(GET或POST请求类型)和CONTENT_TYPE(POST...

    web服务器cgi网关c语言测试程序

    当用户在浏览器中提交表单数据或请求特定资源时,Web服务器会启动CGI程序,传递请求信息,CGI程序处理这些信息后,将结果返回给服务器,再由服务器转发给客户端。CGI使得动态网页内容生成变得可能。 在C语言中编写...

    c语言开发的cgi简单论坛源码

    1. **HTTP协议理解**:CGI程序需要理解HTTP请求的结构,如GET和POST方法,以及如何处理请求头和请求体中的数据。 2. **CGI环境变量**:学习如何利用如REQUEST_METHOD、QUERY_STRING、CONTENT_TYPE和CONTENT_LENGTH等...

    如何用C语言进行CGI程序设计?.doc

    ### 如何用C语言进行CGI程序设计? #### 一、CGI概述 CGI(Common Gateway Interface,通用网关接口)是一种规范,用于定义Web服务器如何与外部应用程序(即CGI程序)通信的标准接口。当用户通过Web浏览器提交表单...

    cgi-util C语言写CGI库

    在实际应用中,开发者可以创建CGI程序来处理用户表单提交、执行数据库查询、生成动态内容等。 总结起来,`cgi-util`是一个用于C语言的CGI库,提供了丰富的功能,帮助开发者高效地编写服务器端的CGI应用程序,以满足...

    C语言编写的CGI开发库(linux)

    `cgilib`是一个专门为C语言开发者设计的CGI库,它简化了创建CGI程序的过程,提供了一系列的API来处理常见的CGI任务,比如解析HTTP请求、管理表单数据、处理cookie等。`cgilib-2.01-bin`是该库的一个特定版本,包含了...

    C语言cgic源文件版.rar

    CGI是一种标准,允许Web服务器与外部应用程序交互,通常用于动态网页生成、表单处理等任务。在这个"C语言cgic源文件版.rar"压缩包中,包含了两个关键文件:`cgic.c`和`cgic.h`。 1. `cgic.c`: 这是CGIC库的主要实现...

    CGI之C语言篇CGI之C语言篇.doc

    例如,以下C语言的CGI程序演示了如何处理GET表单: ```c #include #include int main(void) { char *data; long m, n; // 输出HTTP头信息 printf("%s%c%c ", "Content-Type:text/html;charset=gb2312", 13,...

    用c语言编写网页WEB-CGI技术教程

    CGI是一种标准,允许Web服务器与外部应用程序交互,为用户提供动态内容,如表单处理、数据库查询等。 【标签】: 1. **C语言**:C语言是一种基础且强大的编程语言,适用于系统编程、网络编程等多个领域。在Web-CGI...

    CGI之C语言篇.pdf

    通过学习和理解CGI的工作机制和C语言的编程特性,开发者可以构建能够处理各种用户输入、与服务器端资源进行交互的应用程序。尽管现今有更多高级的Web开发技术和框架,但CGI和C语言在Web开发中的历史地位和它们曾经所...

Global site tag (gtag.js) - Google Analytics