我们来看看到底如何从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商业程序,可上传图片存入mysql数据库
网络原理课设,用C语言进行CGI程序设计
用C语言技术进行CGI程序设计用C语言技术进行CGI程序设计
C语言编写的cgi程序,get方式读取参数,并对文件处理
此段cgi代码可以获取get和post两种请求传递给服务器的数据
用C语言编写的CGI程序具 有执行速度快、安全性高等特点。 内容介绍的比较详细
C语言经典程序C语言经典程序C语言经典程序!!!!!
谭浩强编写 C语言程序设计C语言程序设计C语言程序设计C语言程序设计C语言程序设计C语言程序设计C语言程序设计C语言程序设计C语言程序设计C语言程序设计
cgi 接收post的数据
数字信号处理C语言程序集 数字信号处理C语言程序集
教你如何用C语言编写CGI程序,并有例子分析。
C语言CGI编写WEB查询系统
数字信号处理C语言程序集.pdf数字信号处理C语言程序集.pdf
c语言程序结果。c语言程序结果。c语言程序结果。c语言程序结果。c语言程序结果。c语言程序结果。c语言程序结果。c语言程序结果。c语言程序结果。c语言程序结果。c语言程序结果。
详细讲解了数字信号处理的C语言实现方法及其相对应的C语言程序
文件是c语言下http post的demo,利用socket,可以直接编译通过,需要改下自己的api
C语言程序设计教案C语言程序设计教案C语言程序设计教案C语言程序设计教案C语言程序设计教案C语言程序设计教案C语言程序设计教案C语言程序设计教案C语言程序设计教案C语言程序设计教案C语言程序设计教案C语言程序设计...
C语言的CGI编程,详细介绍了如何用C语言进行CGI编程,适合入门者学习,很好的学习资料。
简单的c语言源程序简单的c简单的c语言源程序语言源程序简单的c语言源程序
C语言C语言程序设计老谭的C语言程序设计老谭的C语言程序设计老谭的C语言程序设计老谭的C语言程序设计老谭的C语言程序设计老谭的