第一个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的内容,仅作为该函数的演示。

 #include <cstdlib>
#include <iostream>
int main()
{
std::cout << getenv("path")<<std::endl;
return ;
}

图1.运行结果

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

3.第一个CGI程序

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

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

for (int i = ; i < ; 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.点击提交之后

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

  1. Hello World! 这是我的第一个 CGI 程序

    Hello World! 这是我的第一个 CGI 程序上面的 C++ 程序是一个简单的程序,把它的输出写在 STDOUT 文件上,即显示在屏幕上.在这里,值得注意一点,第一行输出 Content-ty ...

  2. ubuntu下使用C语言开发一个cgi程序

    主要步骤是: 1. 开发一个C程序(在标准输出中输出HTML字符串) 2. 复制到apache2的cgi-bin目录去 3. 在httpd.conf中开启cgi功能(我似乎没用到,也可以使用cgi) ...

  3. 写一个CGI程序并运行

    准备Linux和Apache我在/var/www/cgi-bin/下建一个文件get.c #include <stdio.h> #include <stdlib.h> int ...

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

    在编程学习网站学习Python语言,学习到cgi编程章节遇到了一些小问题,课程介绍的为linux环境的Apache配置方法,具体如下: [linux环境配置方法:] 在进行CGI编程前,确保您的Web ...

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

     vi /etc/httpd/conf/httpd.conf httpd默认首页配制: DirectoryIndex index.html index.html.var 首页的位置定义: Docume ...

  6. C语言写CGI程序

    一.CGI概述 CGI(公用网关接口)规定了Web服务器调用其他可执行程序(CGI程序)的接口协议标准.Web服务器通过调用CGI程序实现和Web浏览器的交互, 也就是CGI程序接受Web浏览器发送给 ...

  7. 用 c 写 CGI 程序简要指南

    文章摘要:  CGI规定了Web服务器调用其他可执行程序(CGI程 序)的接口协议标准.Web服务器通过调用CGI程序实现和Web浏览器的交互.CGI程序可以用任何程序设计语言编写,如Shell脚本语 ...

  8. 配置apache运行cgi程序

    配置apache运行cgi程序 文章目录 [隐藏] ScriptAlias目录的CGI ScriptAlias目录以外的CGI 配置apache运行cgi程序可分为两种情况,一是ScriptAlias ...

  9. 一、Java语言概述与开发环境、第一个java程序

    目录: 1.1 Java特点 1.2 Java程序运行机制 1.3 安装JDl和配置环境变量 1.4 第一个JAVA程序 1.5 第一个JAVA程序的含义 前言 Java语言历时近二十年,已发展成为人 ...

随机推荐

  1. 商城项目实战 | 2.2 Android 仿京东商城——自定义 Toolbar (二)

    本文为菜鸟窝作者刘婷的连载."商城项目实战"系列来聊聊仿"京东淘宝的购物商城"如何实现. 上一篇文章<商城项目实战 | 2.1 Android 仿京东商城 ...

  2. js小数处理

    js中的小数处理   先说说Math的几个方法: 1.Math.floor(x)   返回不大于当前数的最大整数. 我的记法:floor 直译 地板  也就是不大于的的意思 (x-0.5 四舍五入取整 ...

  3. 利用Sinopia搭建私有npm包

    1.安装sinopia包 npm install -g sinopia 如果是Windows系统用上面的方式安装sinopia很有可能报错,推荐使用下面方式安装: npm install sinopi ...

  4. 异步工作流控制-condCall

    在JavaScript编程中,异步操作一直是一个问题,回调是一种深层次的嵌套处理方式,我们也可以把嵌套处理转为直线处理以简化异步处理.有过prolog和erlang编程了解的同学可能对模式匹配有深刻的 ...

  5. 【JAVAWEB学习笔记】07_BootStrap、Viewport介绍

    今天主要学习了BootStrap,viewport的介绍和最后对网站进行了重构 今天晨读单词: Compatible:兼容性 viewport:视口 device:设备 initial:初始化(缩写i ...

  6. 致DBA:为什么你经常犯错,是因为你做的功课不够

    专职做DBA已经6年多的事件了,看同行.同事犯了太多的错误,自己也犯了非常多的错误.一路走来,感触非常深.然而绝大多数的错误其实都是很低级的错误.有的是因为不了解某个引擎的特性导致:有的是因为对线上环 ...

  7. 【JAVAWEB学习笔记】24_filter实现自动登录和解决全局的编码问题

    过滤器Filter 学习目标 案例-自动登录 案例-解决全局的编码 一.过滤器Filter 1.filter的简介 filter是对客户端访问资源的过滤,符合条件放行,不符合条件不放行,并且可以对目标 ...

  8. 关于c#邮件发送的简单例子

    这里所说的发送邮件,以发送qq邮件为例. 首先我们先要在自己的邮箱配置好如下选项:

  9. 解决selenium驱动Firefox跳转页慢慢慢的问题

    首先我给自己定义为是一个更新偏执狂.不知道从哪个版本开始,使用selenium驱动打开Firefox浏览器时,会跳转到官网指定页,这个过程真是慢得要死. 为了解决这个问题,我是查了很多资料,解决方案是 ...

  10. Codeforces Round #392 (Div. 2)

    D题,给出n,k,k是n进制数,但是大于十进制时,它的表示方法仍为十进制那种,比如16进制下的15,我们可以看成就是15,或者1|5,也就是1×16+5 = 21,让你求出能表达的最小十进制数 从后面 ...