最新消息:天气越来越冷,记得加一件厚衣裳

C语言实现CGI交互程序

IOT开发 w3sun 2003浏览 0评论

CGI概念

通用网关接口(CommonGatewayInterface/CGI)是一个WEB服务器主机提供信息服务的标准接口,通过提供这样的一个标准接口,WEB服务器能执行应用程序并将它们的输出,如文字、图像、声音等传送给一个WEB浏览器。一般来说,CGI标准接口的功能就是在HTML文档与服务器应用程序之间传递信息。

1、CGI程序的通信方式

当有数据从浏览器传到WEB服务器后,该服务器会根据传送的类型是GET或者POST,将这些接收到的数据传入QUERY_STRING或变量中,CGI程序可以通过标准输入,在程序中接收这些数据。当要向浏览器发送信息时,只要向Web服务器发送 特定的文件头信息,即可通过标准输出将信息发往WEB服务器,WEB服务器处理完这些由CGI程序发来的信息后就会将这些信息发送给浏览器。

2、接收数据

用GET方式接收到的数据保存在Web服务器的QUERY_STRING变量里,而通过POST方式接收到的数据是保存在这个Web服务器变量里。它们的唯一区别就是:以GET方式接收的数据是有长度限制,而用POST方式接收的数据是没有长度限制的,所以要变量CONTENT_LENGHT来限制长度。以GET方式发送数据,可以通过URL的形式来发送,但POST方式发送的数据必须要通过Form才到发送。

参数详解

SERVER_NAME:                 运行CGI序为机器名或IP地址。
SERVER_INTERFACE:            WWW服务器的类型,如:CERN型或NCSA型。
SERVER_PROTOCOL:             通信协议,应当是HTTP/1.0。
SERVER_PORT:                 TCP端口,一般说来web端口是80。
HTTP_ACCEPT:                 HTTP定义的浏览器能够接受的数据类型。
HTTP_REFERER:                发送表单的文件URL。(并非所有的浏览器都传送这一变量)
HTTP_USER-AGENT:             发送表单的浏览器的有关信息。
GETWAY_INTERFACE:            CGI程序的版本,在UNIX下为CGI/1.1。
PATH_TRANSLATED:             PATH_INFO中包含的实际路径名。
PATH_INFO:                   浏览器用GET方式发送数据时的附加路径。
SCRIPT_NAME:                 CGI程序的路径名。
QUERY_STRING:                表单输入的数据,URL中问号后的内容。
REMOTE_HOST:                 发送程序的主机名,不能确定该值。
REMOTE_ADDR:                 发送程序的机器的IP地址。
REMOTE_USER:                 发送程序的人名。
CONTENT_TYPE:                POST发送,一般为application/xwww-form-urlencoded。
CONTENT_LENGTH:              POST方法输入的数据的字节数。

服务器与浏览器之间的信息协议,你实际看不到。有三个类型的头部: Content-type, Location,和Status。Content-type最普遍的。 有关content-type解释可以见有关HTML的说明,一个你可以发出的特定编码象这样:Content-type: text/html,输出数据的类型是text/html;换句话说,是个HTML文件。

实例详解

以经典程序为例说明怎么编写C语言的CGI程序:

#include <stdio.h>
int main(){
     printf("Content-type:text/html\n\n");
     printf("Hello,World!");
     return 1;
}

Content-type:text/html需要独占一行,并且下面要有个空行。这次先做个留言本,提取了bbs2www中的cgi.c和cgi.h用来编程将更简单。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define advicefile "UserAdvice.txt"
main( ){
   char *name="",*email="";
   FILE *advicefile_fp;
   name="addfadfd";
   email="dfdgfgf";
   advicefile_fp=fopen(advicefile,"at");
   fprintf(advicefile_fp,"mingzi=%s\n",name);
   fprintf(advicefile_fp,"emails=%s",email);
}

//将两个字符串放进文件,需要cgi目录可写

此次是在apache下实现,请详细配置参见/etc/httpd/conf/httpd.conf文件并且对/var/www/cgi-bin目录进行权限设置。

转载请注明:雪后西塘 » C语言实现CGI交互程序

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址