第一个CGI程序-----完全就是普通的c语言嘛‘(*∩_∩*)′

第一个CGI程序

————完全就是普通的C语言嘛

‘(*∩_∩*)′

PainterQ

2017年5月14日

上一篇博文里面叙述了Apache的安装和配置方法,恍恍惚惚我就拥有了自己的第一个http服务器。虽然是局域网下的网站但给同学们开开车还是完全够了(咳咳)。好像是有了Apache再把HTTP文档丢到htdocs文件夹就可以了,老司机的工作竟然如此轻松。其实还有很多的姿势都还没有掌握哦,不追求新姿势的人生和咸鱼有什么分别!就是老司机也要做姿势最多的那一个。这一篇我们一起来了解一下什么是动态网页,什么是CGI。

1.动态网页?那么CGI是什么呢

  当网站越来越大,人们终于一如以往的怠惰起来。那一天,大家终于厌烦了一遍遍的制作相似的HTML文档,抱怨着两个文档只有少许的不同就要重写一分,他们开始感到被HTML支配的恐惧,空气的丝缕间溢出的都是绝望的气息。一个俊俏的少年看着无力的人们,说“为什么不写个程序或者脚本来产生HTML呢?”。只一句,浓雾炸裂,日月恢复了昔日的光华。

  能够根据用户的请求动态生成的网页就是动态网页(而不是利用Javascript实现动态交互的网页)。现在已经到处都是这种方法的影子,哪些以.asp、.jsp、.php、.cgi等结尾的页面便是动态生成的(不也这些结尾不代表就不是)。当用户向服务器请求时,服务器根据请求的参数调用运行在服务器上的外部程序来生成页面内容(可以想象这个程序就是一般的程序或脚本,他也许仅仅是处理请求的内容,他也许要访问数据库,他可以做他想做的一切)。CGI是一种接口,他说明了外部程序如何被服务器调用。具体的就是,参数如何传入,处理后的信息如何返回。一般说"CGI程序"是指用C/C++写成的*.cgi程序(就是把编译后的*.exe直接改后缀为*.cgi。实际上我才不管你是什么语言,只要编译成.exe就行)。但是严格地讲CGI不是指哪一种语言写成的程序或脚本,而是凡是能满足CGI接口的语言写成的程序或脚本都叫CGI程序,可以是PHP,python等。

2.环境变量 和 标准输入输出

  一次web请求在HTTP层面就是三部分:请求行、消息报头、请求正文(下一篇博文讨论HTTP协议,欢迎赏光)。请求行和消息报头的一些信息通过环境变量传递给CGI程序,请求正文则以标准输入的方式传给CGI程序,最后,输出消息以标准输出的方式传出并使用HTTP协议发送给客户(当然可以没有输出)。标准输入输出大家一定不陌生,就是printf(),cin,cout。环境变量是操作系统层面的"全局变量",任何程序都可以注册新的环境变量或访问已有的环境变量,正因如此环境变量成为进程之间交互的一种方式。

  在stdlib.h中声明了库函数getenv()用于根据环境变量的名字(char*)获取环境变量,原型如下

char * getenv(const char *name);

  举个例子吧,装过JAVA的都知道要设置一个名叫Path的环境变量,我们就用这个函数来获取Path的内容,仅作为该函数的演示。

1 #include <cstdlib>
2 #include <iostream>
3 int main()
4 {
5     std::cout << getenv("path")<<std::endl;
6     return 0;
7 }

图1.运行结果

  如果本程序编译出现问题,请参看:解决This function or variable may be unsafe

3.第一个CGI程序

  CGI需要用到的环境变量有哪些呢,我们来写第一个CGI程序,它的功能就是返回所有的需要用到的环境变量。这些环境变量其实很多都是HTTP协议的报头,欢迎参看:HTTP协议解析。

  首先定义一个结构数组以方便一会输出,如图。

for (int i = 0; i < 19; i++) {
        std::cout << "<li style = \"color:blue\">";
        _dupenv_s(&env, &length, nevName[i].name.c_str());
        std::cout << nevName[i].name << ‘:‘;
        if (env == nullptr) {
            std::cout << "<br/>";
        }else {
            std::cout <<"<span style = \"color:green\">" <<env       std::cout <<"</span>"<< "<br/>";
        }//使用一个循环依次输出各项的内容

          图2.定义结构数组

  编译后把exe文件放到Apache的cgi-bin文件夹中,再写一个HTML来请求这个程序。并把文件放到htdocs文件夹。

<html>
<head><title>第一个CGI</title></head>
<body>
<form   action = "/cgi-bin/firstCGI.cgi" method="post">
<input type ="submit">
</form>
</body>
</html>

  执行结果:

    

          图3.点击按钮之前

                    图4.点击提交之后

时间: 2024-08-08 13:57:12

第一个CGI程序-----完全就是普通的c语言嘛‘(*∩_∩*)′的相关文章

httpd cgi程序配制+.py .cgi执行

 vi /etc/httpd/conf/httpd.conf ScriptAlias /cgi-bin/ "/var/www/cgi-bin/" <Directory "/var/www/cgi-bin"> AllowOverride None Options +ExecCGI Order allow,deny Allow from all </Directory> ServerName localhost:80 AddHandler cgi

编写我的第一个CGI代码——python学习

在编程学习网站学习Python语言,学习到cgi编程章节遇到了一些小问题,课程介绍的为linux环境的Apache配置方法,具体如下: [linux环境配置方法:] 在进行CGI编程前,确保您的Web服务器支持CGI及已经配置了CGI的处理程序. Apache 支持CGI 配置: 设置好CGI目录: ScriptAlias /cgi-bin/ /var/www/cgi-bin/ 所有的HTTP服务器执行CGI程序都保存在一个预先配置的目录.这个目录被称为CGI目录,并按照惯例,它被命名为/var

使用cgic库搭配ctemplate编写cgi程序

这两天在写开发板上的cgi程序,使用的是C语言编写的我们知道用C语言来写cgi程序是件非常痛苦的事情,我们常常要把html代码写到c语言中进行输出,而且要写一些方法从环境变量中获取post或者get的值.然而我们使用cgic和ctemplate的话帮我们简化了不少的操作,并能把html和C语言分离开来.下面我们来看看怎么使用cgic和ctemplate来优雅的写个cgi程序,因为开发板在公司了,我这里就用pc的Wamp做cgi的服务器了. 配置apache支持cgi. 首先我们先配置apache

在apache中运行 cgi程序

cgi 就是网站中各种后台的程序,该程序可以通过网页运行,cgi可以通过C编写,也可以通过shell,python编写 如何在apache中运行各种cgi程序,例如shell perl等程序 1.在apache的主配置文件httpd.conf 中添加 Scriptalias /cgi  "/usr/local/httpd/cgi-bin/" 然后重启 httpd service httpd restart 2.准备一个cgi程序: vi /usr/local/httpd/cgi-bin

配置apache运行cgi程序

配置apache运行cgi程序 文章目录 [隐藏] ScriptAlias目录的CGI ScriptAlias目录以外的CGI 配置apache运行cgi程序可分为两种情况,一是ScriptAlias目录的CGI,二是ScriptAlias以外目录的CGI. ScriptAlias目录的CGI ScriptAlias指令使Apache允许执行一个特定目录中的CGI程序.当客户端请求此特定目录中的资源时,Apache假定其中文件都是CGI程序并试图运行. ScriptAlias指令形如: Scri

Servlet入门总结及第一个Servlet程序 (转载)

转载请注明出处http://blog.csdn.net/evankaka 一了解Servlet的概念 二Servlet技术功能 三 Servlet技术特点 四 Servlet生命周期 五servlet工作过程 六 Servlet与JSP区别 七Servlet代码结构 八 Servlet第一个程序 一.了解servlet 概念 Servlet定义:Servlet是基于Java技术的Web组件,由容器管理并产生动态的内容.Servlet引擎作为WEB服务器的扩展提供支持Servlet的功能.Serv

Servlet入门总结及第一个Servlet程序

目录 一了解Servlet的概念 二Servlet技术功能 三 Servlet技术特点 四 Servlet生命周期 五servlet工作过程 六 Servlet与JSP区别 七Servlet代码结构 八 Servlet第一个程序 一.了解Servlet的概念 Servlet定义:Servlet是基于Java技术的Web组件,由容器管理并产生动态的内容.Servlet引擎作为WEB服务器的扩展提供支持Servlet的功能.Servlet与客户端通过Servlet容器实现的请求/响应模型进行交互.

Coding girl一个老程序员谈到的一个女程序员的故事

因为有人说我给一个女程序员的建议不靠谱,我不服,因为我的工作经历中的一些女程序员都很不错,比那些男程序员都强,所以,我在新浪微博和twitter上征集女程序员的故事和想法,这两天来,我收到了好几封邮件,让我很感动.其中,有一个故事让我回味很久,在脑海里挥之不去,可能是因为她的经历和我很相似,她的想法和我很有共鸣. 本来,我想通过收到的这些故事然后编辑成一篇关于女程序员的文章,但是我觉得这个故事已经足够好了,任何的编辑都是对这个故事的不尊重,所以,我原封不动,一字不改地把这个故事转到这里.我把一些

[转]Struts1.x系列教程(1):用MyEclipse开发第一个Struts程序

转载地址:http://www.blogjava.net/nokiaguy/archive/2009/01/13/251101.html 本系列教程将详细介绍Struts 1.x的基本原理和使用方法,读者可以参阅<Struts 2系列教程>来比较Struts 1.x和Struts 2.x的相同点和不同点.    在这篇文章中将以一个简单的例子(mystruts)来演示如何使用MyEclipse来开发.运行Struts程序,并给出了解决ActionForm出现乱码问题的方法.读者可以从本文中了解