• 用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=" 120px;position: relative;left: 20px;" /></p>
    </form>
    </center>
    </body>
    </html>
    

    // 服务器端
    /* 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# 串口操作系列(2) -- 入门篇,为什么我的串口程序在关闭串口时候会死锁 ?
    C# 串口操作系列(1) -- 入门篇,一个标准的,简陋的串口例子。
    嵌入式
    [转] Java程序员学C#基本语法两个小时搞定(对比学习)
    test
    LeetCode 【困难】数据库-第1412 :查找成绩处于中游的学生
    LeetCode 【困难】数据库-第1384 :按照年度列出销售总额(每个产品、每年、总销额)
    LeetCode 【困难】数据库-第1369 :获取最近第二次的活动
    LeetCode 【困难】数据库-第1336(超困难):每次访问的交易次数
    LeetCode 【困难】数据库-第1225:报告系统状态的连续日期
  • 原文地址:https://www.cnblogs.com/seeyoumiter/p/12483426.html
Copyright © 2020-2023  润新知