CGI小程序实例

原创 2013年12月02日 16:48:48
用 C/C++ 写 CGI 程序 
  
用 C/C++ 写 CGI 程序非常简单,主要是要清楚什么是 CGI。 

CGI全称 Common Gateway Interface (共同编程接口),是一种编程接口,不论什么语言,只要按照该接口的标准编写出来的程序,即可叫做 CGI 程序。CGI 程序的输入/输出是使用编程语言的标准输入/标准输出,所以用 C/C++ 来写 CGI 程序就好象写普通程序一样,不过还有几样东西要注意的。 

1、CGI 程序的通信方式 

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

2、接收数据 

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

  

好,现在让我们用 C 语言写一个神圣的 CGI 程序 -- Hello,World! 

vi hello.c  # 编辑源文件 

//  Begin 

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


//  End 

gcc -o hello hello.c  # 编译 

将该程序放在 Web 服务器的 cgi-bin 目录下,然后通过以下方式访问: 

http://www.server.com/cgi-bin/examples/c/hello 

这将在浏览器里打印出 Hello,World! 

这就算得上是一个 CGI 程序了,是不是很简单?^_^ 第一句 printf() 是打印头信息,让 Web 浏览器知道以下打印的数据是什么类型的数据,本例子中指定了 text/html 类型,即 html 文档,所以下面的那句 printf() 打印的内容就会像我们写网页内容一样在浏览器上显示出来。 

用 C/C++ 写 CGI 的最难之处应算从浏览器接收数据!不过,借助现成的源程序,从浏览器接收数据也只不过是小菜一碟而已。 

我说的这个现成的源程序是用 FireBird 的 bbs2www 程序包里提取出来的。在这里下载:cgi.c - cgi.h 

经本人提取出来的源程序只有两个文件 cgi.c 和 cgi.h。当要用它们来写 CGI 程序时,只需在程序中加入 #include "cgi.c" 即可,现以例子说明一下使用方法。假设要通过 GET 方式从浏览器接收用户的名字和 E-Mail 地址,源程序如下: 

vi test.c # 编辑源文件 

// Begin 

#include <stdio.h> 
#include "cgi.c" 

main() { 
    char *name,*email; 

    cgi_init(); 
    cgi_html_head(); 
    name = cgi_get("name"); 
    email = cgi_get("email"); 

    printf("name = %s",name); 
    printf("<br>"); 
    printf("email = %s",email); 

    cgi_quit(); 


// End 

首先定义两个指针,然后调用 cgi_init() 来初始化 CGI 环境, cgi_html_head() 打印 HTML 文件类型信息,和 printf("Content-type:text/html\n\n"); 基本一样,不过用 cgi_html_head() 打印的头信息会指定文件的字符编码为 gb2312 即中文字符。调用 cgi_get() 方法取得指定关键字( name 和 email )的值。当完成 CGI 部分的代码后,要通用调用 cgi_quit() 和释放 CGI 所点的系统资源。最后就像以住一样去编译程序,gcc -O6 -o test test.c 然后将该程序放到 cgi-bin 目录,接着通过以下方式调用该程序。 

http://www.server.com/cgi-bin/examples/c/test?name=charles&email=charles@netease.com 

好了,一切就是这样简单!要开发更好的 CGI 程序就要靠您的 C/C++ 的功力了。欢迎指教! 

此文转载自网络文章!

三、python小程序实例(python编写cgi服务)

继上篇文章介绍了python部署之后,此篇文章主要介绍小程序实例开发部署  表单提交案例: 1、helloForm.html  以下为表单通过POST方法(method="post")向服务器脚本 ...
  • u012255097
  • u012255097
  • 2017年07月24日 19:17
  • 205

cgi程序实例

.container { /* background-color: gray; */             width: 500px; height:500px; position:absolute...
  • juslly
  • juslly
  • 2017年11月27日 10:57
  • 82

一个简单的cgi编程例子

工作环境 操作系统:Ubuntu 12.04Web服务器:Apache开发语言:Python 准备工作 安装Apache sudo apt-get install apache2 配...
  • luyaran
  • luyaran
  • 2016年11月17日 13:56
  • 557

c#经典编程实例(四窗体应用程序)

一:.NET中窗体应用程序就是一种GUI程序 窗体创建的两种方式: (1)自动生成的是: Application.Run(new Form1()); 相当于: Form1 f...
  • zxq1138634642
  • zxq1138634642
  • 2013年06月15日 18:13
  • 23150

目前为止最全的微信小程序项目实例

wx-gesture-lock  微信小程序的手势密码 WXCustomSwitch 微信小程序自定义 Switch 组件模板 WeixinAppBdNovel 微信小程序demo:百度小...
  • zuoliangzhu
  • zuoliangzhu
  • 2016年12月24日 21:10
  • 148459

深入分析windows下配置wamp环境各模块的版本兼容性

版本相关概念说明: ts/nts: thread safety 线程安全 > TS refers to multithread capable builds. > NTS refers to...
  • syming
  • syming
  • 2014年09月10日 10:53
  • 446

[MFC]程序示例:三子棋游戏

1. 游戏功能简介:     1) 3×3棋盘,9宫格,每格可放一个棋子;     2) 鼠标左键落X右键落O,保证X和O轮流出现防止作弊,并且设定X为先手;     3) 棋盘是井字形的框,鼠标双击...
  • Lirx_Tech
  • Lirx_Tech
  • 2015年06月03日 20:18
  • 1237

微信小程序入门详解

首先安装微信web开发者工具,微信账号登录。1 简介2 目录结构 小程序启动时,会读取app开头的文件,生成小程序实例。并从app.json中找到入口页面进行显示。3 框架结构 由微信小程序的系统...
  • qq_33566350
  • qq_33566350
  • 2017年08月02日 22:26
  • 472

微信小程序入门教程+案例demo

微信小程序入门教程+案例demo 尊重原创,转载请注明出处:原文查看惊喜更多 http://blog.csdn.net/qq137722697 首先摆在好姿态,——微信小程序开发也就那么回事。你...
  • qq137722697
  • qq137722697
  • 2016年10月31日 23:25
  • 54115

tomcat上部署CGI

之前学了Perl的基础,本来打算只学Perl如何访问数据库就算了,不过发现CGI也还挺好玩的,顺便学习一下吧,而且通过浏览器和数据库进行交互好像也很酷。 现在CGI不是很流行了,基本上被Jsp/Se...
  • sunshoupo211
  • sunshoupo211
  • 2014年06月25日 13:59
  • 2500
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:CGI小程序实例
举报原因:
原因补充:

(最多只允许输入30个字)