CGI(Common Gateway Interface)通用网关接口,它是一段程序,运行在服务器上。如:HTTP服务器,提供同客户端HTML页面的接口。

CGI程序可以是python脚本,PERL脚本,shell脚本,c或者c++程序等。

web服务器支持及配置

apache支持CGI配置:一般CGI目录为:/var/www/cgi-bin/

CGI文件的扩展名为.cgi,python也可以使用.py扩展名。

默认情况下,Linux操作系统配置运行的cgi-bin目录中为/var/www.如果要自定义,可以在http.conf配置文件中修改。

在/var/www/cgi-bin目录下创建第一个cgi程序,文件名为hello.py

在浏览器中访问显示结果如下:

注:用print输出一个空行用于告诉服务器结束头部信息。

一、HTTP头部

        HTTP头部格式如下:

HTTP 字段名:字段内容

例如:Content-type:text/html (告诉浏览器文件的内容类型)

CGI程序中HTTP头部经常使用的信息

 二、GET和POST方法

浏览器客户端通过这两种方法向服务器传递信息。

1. 使用GET方法传输数据

GET方法发送编码后的用户信息到服务端,数据信息包含在请求页面的URL上,以“?”分割。

如:http://192.168.112.128/cgi-bin/hello.py?key1=value1&key2=value2

GET请求:可被缓存,可以保留在浏览器历史纪录中,可被收藏为书签,不应在处理敏感数据时使用,请求长度有限制,只应当用于取回数据。

简单的URL实例:GET方法

使用GET方法向hello_get.py程序发送两个参数

实例一: /cgi-bin/hello_get.py?name=菜鸟教程&url=http://www.runoob.com

浏览器测试结果:

实例二:通过html的表单使用GET方法向服务器发送两个数据

在html文件夹下创建一个html文件,文件内容如下;

浏览器演示结果如下:

输入文字后,点击提交,结果如下

2.使用post方法传递数据

使用post方法向服务器传递数据是最安全可靠的,像一些敏感信息,如用户密码等都需要使用post传输数据

实例一:通过CGI程序传递checkbox数据

checkbox用于提交一个或者多个选项的数据

html 代码如下:

checkbox.py文件代码如下

浏览器访问结果:

实例二: 通过CGI程序传递Radio数据

Radio只向服务器传递一个数据

HTML代码如下:

radiobutton.py文件内容如下:

浏览器访问结果如下

实例三:通过CGI程序传递Textarea数据

Textarea向服务器传递多行数据。HTML代码如下:

加载的textarea.py文件的内容如下:

浏览器访问的结果如下:

实例四: 通过CGI程序传递下拉数据

HTML下拉框代码如下:

dropdown.py脚本代码如下:

浏览器访问结果:

实例五:CGI中使用Cookie

http协议一个很大的缺点就是不对用户身份进行判断,这样给程序员带来很大的不便,而Cookie功能的出现弥补了这个不足。cookie在客户访问脚本的同时,通过客户的浏览器,在客户硬盘上写入记录数据,当下次客户访问脚本时取回数据信息,从而达到身份判别的功能,cookie常用在身份校验中。

cookie的语法

http cookie的发送是通过http头部实现的,早于文件的传递,头部set-cookie的语法如下:

set-cookie:name=name;expires=date;path=path;domain=domain;secure

name=name:需要设置cookie的值

expires=date:cookie的有效期限,格式:expirse=“Why,DD-Mon-YYYY HH:MM:SS"

path=path:设置cookie支持的路径。

domain=domain:对cookie生效的域名

secure:如果给出此标志,表示cookie只能通过SSL协议的https服务器来传递。

cookie的接收是通过设置环境变量HTTP_COOKIE来实现的,CGI程序可以通过检索该变量获取cookie信息。

Cookie的设置会在http头部单独发送。

1. Cookie设置:在cookie中设置了name和expirse

浏览器访问结果如下:

2: 检索cookie信息

cookie信息存储在CGI环境变量HTTP_COOKIE中,存储格式如下:

key1=value1;key2=values; key3=value3...

浏览器访问结果

实例六:文件上传

HTML设置上传文件的表单需要设置enctype属性为multipart/form-data

save_file.py脚本内容如下:

浏览器访问结果:

查看上传成功的文件

实例七:文件下载

文件下载通过设置HTTP头部信息来实现

在当前目录下创建文件foo.txt,用于程序下载

浏览器访问结果

Python CGI编程的更多相关文章

  1. Python CGI编程(转自易百)

    Python CGI编程 Python的CGI编程,公共网关接口或CGI,Web服务器和一个自定义的脚本之间交换信息是一组定义的标准.     什么是CGI ? 公共网关接口或CGI,Web服务器和一 ...

  2. python CGI编程-----简单的本地使用(1)

    本章节需要安装python开发工具,window平台安装地址:https://www.python.org/downloads/windows/,linux安装地址:https://www.pytho ...

  3. 转:python cgi编程

    转:http://www.runoob.com/Python/python-cgi.html 什么是CGI CGI 目前由NCSA维护,NCSA定义CGI如下: CGI(Common Gateway ...

  4. 吴裕雄--天生自然python学习笔记:Python CGI编程

    什么是CGI CGI 目前由NCSA维护,NCSA定义CGI如下: CGI(Common Gateway Interface),通用网关接口,它是一段程序,运行在服务器上如:HTTP服务器,提供同客户 ...

  5. python CGI 编程实践

    文章更新于:2020-03-05 注1:安装 python 参见: python 的安装使用和基本语法 注2:配置 web 环境参见: Windows&linux使用集成环境搭建 web 服务 ...

  6. Python CGI编程和CGIHTTPServer

    Python2.7 的CGIHTTPServer 可以作为一个简单的HTTP服务器,能够调用cgi脚本 1 在任意目录下创建一个特殊的目录 cgi-bin ,用于存放自己写的脚本(.py或.cgi) ...

  7. python CGI编程Apache配置

    1. 编辑http.conf,添加两行,路径可以自定义 <Directory "C:/AppServ/www/cgi-bin"> AllowOverride None ...

  8. Common Gateway Interface Python CGI编程

    https://en.wikipedia.org/wiki/Gateway_(telecommunications) In telecommunications, the term gateway r ...

  9. 彻底解决python cgi 编程出现的编码问题

    Answering this for late-comers because I don't think that the posted answers get to the root of the ...

随机推荐

  1. android studio Authentication failed for

    今天更新项目代码提示   Authentication failed for  后来一起是把git平台密码修改了 忘了修改android studio 密码所以更新失败 我在android studi ...

  2. [译] iOS 11.4.1 Beta:全新的USB限制模式

    (Source/原文链接 https://blog.elcomsoft.com/2018/06/ios-11-4-1-beta-usb-restricted-mode-has-arrived/) 作者 ...

  3. Tomcat修改service.xml性能调优 增加最大并发连接数

    详细配置: <Connector executor="tomcatThreadPool"               port="80" protocol ...

  4. 如何获取微信小店小程序的AppID

    2017年11月16日,微信有一个重磅的宣布:为了帮商家在微信内快速开店,方便商家和用户之间沟通,所有认证公众号,可快速创建微信小店小程序.这个改变是否能给微信小店带来新的生机?还需要时间的考验.微信 ...

  5. cesium3dtiles位置改变

    cesium偏移3dtiles高度var heightOffset = 20.0; var boundingSphere = tileset.boundingSphere; var cartograp ...

  6. DevExpress 折线图和柱状图的绘制与数据绑定

    DevExpress 组件是一个非常丰富和强大的组件,适合各种可视化图形的绘制与展示,在数据分析展示中是个很有帮助的,网上也有很多关于这方面的文章,关于折线图或柱状图的画法,以下是自己在工作中接触到的 ...

  7. layer.open参数;layer.open关闭事件;layer.open关闭刷新;layer.open获取子页的值;layer.open调用子页面的方法

    父页面 function layerOpen() { layer.open({ type: 2, shade: [0], title: "验收申请", area: ['1024px ...

  8. 【学习】如何安装GraphLab Create 【转载】

    前人走过的路不用再走,慢慢加上一些工具的链接 GraphLab Create安装,链接地址: http://www.imooc.com/article/18094?block_id=tuijian_w ...

  9. 在IDEA中设置命令行参数

  10. Kafka(1)--kafka基础知识

    Kafka 的简介: Kafka 是一款分布式消息发布和订阅系统,具有高性能.高吞吐量的特点而被广泛应用与大数据传输场景.它是由 LinkedIn 公司开发,使用 Scala 语言编写,之后成为 Ap ...