`
leo428
  • 浏览: 14456 次
  • 性别: Icon_minigender_1
  • 来自: 成都
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

用 C/C++ 写 CGI 程序

阅读更多
用 C/C++ 写 CGI 程序

小传(zhcharles) 

其实用 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++ 的功力了。欢迎指教!
分享到:
评论

相关推荐

    window可用cgi程序(c/c++)

    综上所述,"window可用cgi程序(c/c++)"涉及的知识点包括CGI原理、C/C++编程、Nginx服务器配置、spawn-fcgi的使用以及性能和安全考量。在实际操作中,需要结合提供的源码和使用说明来实现CGI程序在Windows环境下的...

    c/c++实现CGI的样例

    C/C++实现CGI程序, 包含基本框架, 参数标准URI编解码, 数据解析, 回传数据等, 供学习之用

    学习用c、c++写cgi程序

    ### 学习用C、C++编写CGI程序 #### 一、CGI简介与原理 **Common Gateway Interface (CGI)**,即通用网关接口,是一种标准接口,用于定义客户端(如Web浏览器)与服务器端(如Web服务器)之间进行交互的方式。它...

    c/c++源代码网站

    标题和描述中提到的"C/C++源代码网站"是指一系列在线平台,这些平台提供C和C++编程语言的源代码示例、库、组件和项目,对于学习和开发C/C++程序的人来说是非常宝贵的资源。以下是对这些网站及其提供的内容的详细说明...

    http服务器 c/c++写成 (只使用了socket)

    在C/C++中,我们主要使用`socket()`, `bind()`, `listen()`, `accept()`, `send()`, `recv()`等函数来创建、连接、监听和通信。 2. HTTP协议:超文本传输协议(HTTP)是用于从万维网服务器传输超文本到本地浏览器的...

    cgi-test-test.rar_c cgi_c++ cgi_cgi_cgi c++_cgi-test.c

    `c++_cgi.c`可能是一个使用C++语言编写的CGI程序,它利用了C++的类和对象来组织代码,以实现更复杂的业务逻辑。 4. **CGI测试**:`cgi-test.c`可能是一个用于测试CGI功能的程序,它可以帮助开发者验证CGI程序是否...

    Fastcgi学习总结(C/C++语言版)

    总的来说,FastCGI通过优化CGI的运行机制,提高了Web服务的性能和可扩展性,尤其对于C/C++开发者,提供了编写高效Web应用程序的途径。尽管现代Web开发中还有其他如PHP-FPM、WSGI等接口,但FastCGI仍然在某些场景下...

    一些自已写的CGI程序

    在本例中,标题提到的是“一些自已写的CGI程序”,这意味着我们正在讨论用户自己编写的CGI应用,可能是用C或C++语言实现的。 CGI在Web开发中的作用是充当桥梁,它接收来自HTTP服务器的请求,并生成一个响应,这个...

    cgi_file_upload

    用纯C++语言写的CGI 处理http协议文件上传,程序中可以设置缓存区,不是把文件一下子全部的写入硬盘,而是从stdin中读取流,然后放置到缓存区,再由缓存区写入文件中,经测试可以上传好几G大小的文件。适用在arm或者...

    login-cgi-mysql.zip_WEB开发_C/C++_

    在这个“login-cgi-mysql.zip”压缩包中,我们关注的是一个使用C/C++编写的CGI程序,其主要功能是实现Web用户的登录验证,验证过程通过连接MySQL数据库来完成。以下将详细讨论这个知识点。 1. **CGI基础**: CGI是...

    C-C++常用网址.docx

    标题中的"C-C++常用网址.docx"文档是一个资源集合,为C/C++程序员提供了一系列优秀的网站,这些网站提供了丰富的C/C++源代码示例、项目、教程和工具。描述部分指出,这个清单并非详尽无遗,作者欢迎任何补充和建议以...

    50个C和C++源码网站

    8. **C Programming(http://www.cprogramming.com/cgi-bin/source/source.cgi)**:这个网站专门针对C/C++,提供了丰富的源代码和编程指导,适合所有水平的开发者。 9. **CodeCogs(http://www.codecogs.com/)**...

    CGI开发包,用于分解数据和各个变量  .zip_c cgi_cgi_cgi c++_cgi-web

    这有助于开发者在本地环境中测试CGI程序。 "www.pudn.com.txt"可能是关于这个压缩包来源的信息,或者是从某个网站下载资源的记录。 "CGIC.HTM"可能是库的文档或介绍,它可能包含关于如何使用Cgic库的详细信息,...

    html和cgi程序

    在Linux环境中,CGI脚本通常用Perl、C或C++编写。在这个压缩包中,可能包含的是用C语言编写的CGI源程序,用于处理来自Web端的请求,比如获取摄像头数据、控制LED状态或者修改开发板时间。 **Web端功能实现:** 1. ...

    c++源码参考网站

    8. **C and C++ Programming Resource (http://www.cprogramming.com/cgi-bin/source/source.cgi)**:提供了一系列C和C++编程资源,包括代码示例、教程和论坛,是学习C/C++编程的全面指南。 9. **CodeCogs ...

    50个老鸟常去的C源代码网站

    8. **Cprogramming.com (http://www.cprogramming.com/cgi-bin/source/source.cgi)**:专注于C/C++的社区,提供源代码和编程技巧,是提高编程水平的有效途径。 9. **CodeCogs (http://www.codecogs.com/)**:提供...

    cgi用户登录验证源码和例子

    由于资源限制,嵌入式系统通常需要轻量级的解决方案,因此选择C++这样的低级别语言编写CGI程序可以优化性能。 总的来说,这个资源包提供了一个可移植的C++ CGI用户登录验证解决方案,适用于多种环境,特别是嵌入式...

    cgictest.rar_cgi_cgi c++_cgictest_cgictest.cgi_cgi服务器

    当用户通过浏览器访问一个CGI程序时,Web服务器接收请求并将其转发给CGI程序。CGI程序执行后生成HTML响应,再由Web服务器将这些响应内容返回给用户。这个过程使得Web服务器可以从外部程序获取数据,丰富了网页的交互...

    C++Builder开发Web应用程序

    1. **ISAPI (Internet Server Application Programming Interface)**:专为Microsoft IIS设计的接口,允许开发人员使用C/C++等语言编写Web应用程序。ISAPI应用程序通常以DLL形式存在,直接嵌入IIS进程,从而提高了...

Global site tag (gtag.js) - Google Analytics