|   登录   |   注册   |   设为首页   |   加入收藏   

用户登录

close

用户名:

密码:

新用户注册

close

用户名:

密码:

密码确认:

电子邮箱:

关注内容:

个人主页:

帮助

close

龙宇网成立于2008年3月,网站进入整体运作于2010年10月1日。

在这里,我们把它做成了一个真正意义上的网站,完全以个人的信息为内容,以网友的需要为主导,全力搜罗各种信息,建立完善的网站功能,使网友在这里可以第一时间找到所需要的信息。

现在,经过三年的努力,网站的资料已经相当丰富,而网站得到了大家的喜爱和认可。

但,我们还是会继续努力下去,让网间的这份快乐继续持续下去,让这份闲暇时的日子,与快乐一并同行。

寻觅快乐,网住快乐,关注网络,是龙宇网的宣言与承诺。

CGI接受HTTP传递参数的处理方法

分类: 数据结构 发布时间: 2016-12-01 16:31:41 浏览次数: 3146
内容提要: 公共网关接口CGI(Common GatewayInterface) 是WWW技术中最重要的技术之一,有着不可替代的重要地位。CGI是外部应用程序(CGI程序)与Web服务器之间的接口标准,是在CGI程序和Web服务器之间传递信息的规程。CGI规范允许Web服务器执行外部程序,并将它们的输出发送给Web浏览器,CGI将Web的一组简单的静态超媒体文档变成一个完整的新的交互式媒体。

GET表单的处理
login.html

<html>

<head>

<title>cgi登陆</title>

</head>

<body>

<form name="login" action="../../cgi-bin/my_cgi/login.cgi">

姓名:

<input type="text" name="name" />

<br/>

密码:

<input type="password" name="pwd" />

<br/>

<input type="submit" value="login" />

</form>

</body>

</html>

 

login.c

#include<stdio.h>

#include<stdlib.h>

int main()

{

 char *date;

 char name[50],pwd[20];

 printf("content-type:text/html;charset=gb2312\n\n");

 printf("<TITLE>登陆结果</TITLE>");

 printf("<H3>登陆结果</h3>");

 date=getenv("QUERY_STRING");

 if(date==NULL)

  printf("<p>错误:数据没有被输入或数据传输发生错误</p>");

 else{

  sscanf(date,"name=%[^&]&pwd=%s",name,pwd);

  printf("<p>name=%s</p>",name);

  printf("<p>pwd=%s</p>",pwd);

  printf("%s",date);

 }

 return 0;

}

在Linux下用gcc -o add.cgi add.c 对add.c进行编译,add.c 中的a 、b对应input 中name的值。

POST表单处理

在CGI的定义中,对于POST类型的表单,其内容被送到CGI程序的标准输入(在C语言中是stdin),而被传送的长度被放在环境变量CONTENT_LENGTH中。因而我们要做的就是,在标准输入中读入CONTENT_LENGTH长度的字符串。从标准输出读入数据听起来似乎要比从环境变量中读数据来的要容易一些,其实则不然,有一些细节地方要注意,这在下面的程序中可以看到。特别要注意的一点就是:CGI程序和一般的程序有所不同,一般的程序在读完了一个文件流的内容之后,会得到一个EOF的标志。但在CGI程序的表单处理过程中,EOF是永远不会出现的,所以千万不要读多于CONTENT_LENGTH长度的字符,否这会有什么后果,谁也不知道(CGI规范中没有定义,一般根据服务器不同而有不同得处理方法)。

//从stdin中获取数据示例,但未进行字符串处理。

Hp.html

<html>

<head>

<title>cgi的post提交</title>

</head>

<body>

<form name="login" action="../../cgi-bin/my_cgi/hp.cgi" method="post">

内容:

<input type="hidden" value="login" name="page">

<input type="text" name="data"/><br/>

<input type="submit" value="submit" />

</form>

</body>

</html>

Hp.c

#include <stdio.h>

#include <stdlib.h>

#define MAXLEN 80

int main()

{

int i;

char *lenstr;

char data[MAXLEN];

long len;

printf("Content-type:text/html;charset=gb2312\n\n");

printf("<html><head><title>cgi test</title></head>");

printf("<body>");

}

3
0

分类: 数据结构   |   评论: 0   |   引用: 0   |   浏览次数: 3146