设为首页 加入收藏

TOP

用C语言进行CGI程序设计(二)
2014-11-23 23:21:02 来源: 作者: 【 】 浏览:2
Tags:语言 进行 CGI 程序设计
GI程序,因此POST方法可较方便的传递数据给CGI程序。
SCRIPT—NAME:该CGI程序的名称
QUERY-STRING:当使用POST方法时,Form中的数据最后放在QUERY-STRING中,传递给CGI程序
CONTENT-TYPE:传递给CGI程序数据的MIME类型,通常为"application/x-www-form-url-encoded",它是html form中以POST方法传递数据给CGI程序的数据编码类型,成为URL编码类型。
CONTENT-LENGTH: 传递给CGI程序的数据字符数(字节数)

三,Form中输入的分析和解码

1. 分析名字/值对

当用户提交一个html form时,Web浏览器首先对form中的数据以名字/值对的形式进行编码,并发送给Web服务器,然后由Web服务器传递给CGI程序。其格式如下:
name1=value1&name2=value2&name3=value3&name4=value4...
其中名字是form中定义的input、select或textarea等tag的名字,值是用户输入或者选择的值。这种格式即为URL编码,程序中需要对其进行分析和解码。要分析这种数据流,CGI程序必须首先将数据流分解成一组组的名字/值对,这可以通过在输入流中查找下面的两个字符来完成。
每当找到字符=,标志着一个form变量名字的结束;每当找到字符&,标志着一个form变量值的结束。清注意输入数据的最后一个变量值不以&结束。
一旦名字/值对分解后,还必须将输入中的一些特殊字符转换成相应的ASCII字符,这些特殊字符是:
+ : 将+转换成空格符
%xx : 用其十六进制ASCII码值表示的特殊字符。根据值xx将其转换成相应的ASCII字符。
对form变量名和变量值都要进行这种转换。下面是一个对form数据进行分析并将结果回送给Web服务器的CGI程序。


C代码
#include
#include
#include

int htoi(char *);

main()
{
int i, n;
char c;
printf("Contenttype:text/plain\n\n");
n = 0;
if(getenv("CONTENT-LENGTH"))
n = atoi("CONTENT-LENGTH");
for(i = 0;i < n;i++)
{
int is-eq = 0;
c = getchar();
switch(c)
{
case '&' :
c = '\n';
break;
case '+' :
c = ' ';
break;
case '%' :
{
char s[3];
s[0] = getchar();
s[1] = getchar();
s[2] = 0;
c = htoi(s);
i += 2;
}
break;
case '=' :
c = ':';
is-eq = 1;
break;
};
putchar(c);
if(is-eq)
putchar(' ');
}
putchar('\n');
fflush(stdout);
}

/** Convert hex string to int **/
int htoi(char *s)
{
char *digits = "0123456789ABCDEF";
if(islower(s[0])) s[0] = toupper(s[0]);
if(islower(s[1])) s[1] = toupper(s[1]);
return 16 * (strchar(digits,s[0]) - strchar(digits, '0')) + (strchar(digits,s[1] - strchar(digits, '0')));

}

上面的程序首先输出一个MIME头信息给Web服务器,检查输入中的字符数,并循环检查每个字符。

三,产生HTML输出

CGI的输出由两部分组成:MIME头信息和实际的信息。两部分之间以一个空行分开。可以使用MIME头信息为"Contenttype:text/html\n\n"来输出html源代码给Web服务器,下面是一个简单的例子:


C代码
#include
#include
main()
{
printf("Contenttype:text/html\n\n");
printf("\n");

printf("An HTML Page From a CGI\n″");

printf("

This is an HTML page generated from with i n a CGI program..   .

\n");

printf("

\n");

printf(" Go back to out put.html page <
/b>
\n");

printf("\n");

printf("\n");

fflush(stdout);
}

作者“telyy123”

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇#pragma warning (disable : 4786) 下一篇补码的简单探究

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: