用C语言编写cgi程序

摘要:
但用C语言编写的CGI程序具有执行速度快、安全性高等特点。简单地说,Cgi适用于Perl和其他脚本语言,就像ECMAScript适用于javascript一样。前者也是一组标准(接口)。CGI原则CGI接口标准包括标准输入、环境变量和标准输出:stdlib在h库中定义的用于CGI编程的环境变量列表:无论你用Perl还是C编写CGI程序,你实际上都调用了标准库中构建的一系列api。

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原理

用C语言编写cgi程序第1张

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

用C语言编写cgi程序第2张


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

用C语言编写cgi程序第3张

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

案例

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

<!DOCTYPE html>
<html lang="en">
<head>
	<title>cgi_test</title>
</head>
<body>
<center>
<!-- 注意表单的 action值 -->
<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="请输入: "   /></p>
</form>
</center>
</body>
</html>

用C语言编写cgi程序第4张

// 服务器端
/* 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
");
	printf("<h1>get and post< !/h1>
");
	if(getenv("CONTENT-LENGTH")) {			   // 检查环境变量CONTENT-LENGTH是否为空(Web服务器并不以文件结束符来终止它的输出,所以如果不检查环境变量CONTENT-LENGTH, CGI程序就无法知道什么时候输入结束了)
		n=atoi(getenv("CONTENT-LENGTH"));      // 使用atoi()将CONTENT-LENGTH转换为整数,内容的长度
		Str = getenv("QUERY_STRING");
	}
	printf("%s
", Str);					   // 打印get方法获取的信息
	fflush(stdout); 
	return 0;
}

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

用C语言编写cgi程序第5张
用C语言编写cgi程序第6张

免责声明:文章转载自《用C语言编写cgi程序》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇JSP(二)vite支持optionalChaining可选链判断运算符和nullishCoalescingOperator下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

C语言判断文件指针是否结尾的问题

c语言的文件指针结尾问题:有两个方法可以判断文件指针是否到结尾pay attention:读取文件的函数会影响文件指针移动1.使用feof(文件指针)函数判断,如果到了结尾返回0,否则返回非02.使用EOF(就是-1)判断指针是否到结尾 仅用于普通文件,不适用于二进制文件适用条件--------重点方法1:*1.有一个弊端就是,feof函数判断文件指...

【C语言】双人格斗小游戏(源码)

【C语言】双人格斗小游戏 芜湖 程序介绍:【C语言】实现双人控制的战斗小游戏 /*-------------------------------------- project: 双人小游戏 anthor: LLz 操作 移动 逆、顺时针旋转 发射子弹 玩家1 4568 7 9 0 玩家2 adws...

c语言中typeof关键字

为什么因为一个关键字而专门写一篇随笔呢?因为这个关键字在Linux里面地位非同一般!这个关键字typeof在linux内核里面使用非常广泛! 下面这两个等效声明,用于声明int类弄的变量atypeof(int) a;typeof('b') a; //相当于获取'b'的类型,定义一个变量a下面用于声明指针和数组typeof(int*) p1,p2;typeo...

自己用C语言写单片机PIC18 serial bootloader

了解更多关于bootloader 的C语言实现,请加我QQ: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序)。 HyperBootloader_PIC18_J 和 HyperBootloader_PIC18_None_J 完成PIC16 bootloader (详细情况请阅读我的上一篇随笔《...

vscode利用dev配置c语言,VSCode搭建C++/C调试编译环境(使用DevC++)

关于VSCode使用Dev C++的MinGW64来调试C++/C网上的教程试了很多,大部分都已经过时了或者说是不适配了,最后就选择使用Dev原有的东西来实现,不建议自己下载MinGW64,里面安装的时候有些选项不知道选什么的话很容易出现问题。 配置Dev下MinGW64的路径 假设Dev已经安装好了,然后现在要做的就是将Dev目录下的MinGW添加到环境...

我的全栈之路-C语言基础之数据存储

我的全栈之路-C语言基础之数据存储 我的全栈之路 2.1 计算机的计算单位 2.1.1 容量单位 2.1.2 速度单位 2.2 计算机底层为什么只能识别二进制 2.3 进制 2.3.1 进制概述 2.3.2 十进制转换二进制、八进制、十六进制 2.3.3 二进制、八进制、十六进制转十进制 2.3.4 二进制转八进制、十六进制 2.3.5 八进制...