用C语言编写cgi程序

CGI 简介

  CGI(Common Gateway Interface: 公用网关接口) 规定了Web服务器调用其他可执行程序(CGI程序)的接口协议标准。Web服务器通过调用CGI程序实现和Web浏览器的交互,也就是CGI程序接受Web浏览器发送给Web服务器的信息,进行处理,将响应结果再回送给Web服务器及Web浏览器。CGI程序一般完成Web网页中表单(Form)数据的处理、数据库查询和实现与传统应用系统的集成等工作。CGI程序可以用任何程序设计语言编写,如Shell脚本语言、Perl、Fortran、Pascal、C语言等。但是用C语言编写的CGI程序具有执行速度快、安全性高(因为C语言程序是编译执行且不可被修改)等特点。
  简单来说,Cgi之于Perl等这些脚本语言,就如ECMAScript于javascript,前者同样是一套标准(接口)

cgi原理

CGI接口标准包括标准输入、环境变量、标准输出三部分:


stdlib.h库中定义的用于Cgi编程的环境变量列表:

  无论是用Perl还是C语言写cgi程序,实际上都是调用标准库内置的一系列api。

案例

<!-- 客户端 -->
<!-- cgi_test.html -->

<!DOCTYPE html>
<html lang="en">
<head>
    <title>cgi_test</title>
</head>
<body>
<center>
<!-- 注意表单的 action值 -->
<form id="form" name="form" method="get" action="http://localhost:12308/cgi-bin/test/cgi_test.cgi">
    <p>姓名:<input type="text" name="user" /></p>
    <p><input type="submit" name="submit" value="提交" placeholder="请输入: " style="width: 120px;position: relative;left: 20px;" /></p>
</form>
</center>
</body>
</html>

扫描二维码关注公众号,回复: 9801910 查看本文章
// 服务器端
/* cgi_test.cgi */
/* 将以下C代码编译成.cgi二进制文件后即可使用 */
// 以下代码可以得到上述表单通过get方法传给服务器的信息
/*
  get方式提交,意思就是把提交的内容放在地址后面,用?隔开
  post提交就是把数据放在数据包里发送给目标地址
*/

#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include "iostream"
#include "string"
using namespace std;

int _tmain(int argc, _TCHAR* argv[]) {      // Html头信息,它告诉Web服务器随后的html代码输出是以纯ASCII文本的形式
    int i, n = 0;
    string Str = "";
    printf("Content-type:text/html\n");
    printf("<h1>get and post< !/h1>\n");
    if(getenv("CONTENT-LENGTH")) {             // 检查环境变量CONTENT-LENGTH是否为空(Web服务器并不以文件结束符来终止它的输出,所以如果不检查环境变量CONTENT-LENGTH, CGI程序就无法知道什么时候输入结束了)
        n=atoi(getenv("CONTENT-LENGTH"));      // 使用atoi()将CONTENT-LENGTH转换为整数,内容的长度
        Str = getenv("QUERY_STRING");
    }
    printf("%s\n", Str);                       // 打印get方法获取的信息
    fflush(stdout); 
    return 0;
}

// .cgi文件一般放在Apache服务器的cgi-bin目录即可使用


猜你喜欢

转载自www.cnblogs.com/seeyoumiter/p/12483426.html