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. Mysql-12条优化技巧

    应用程序慢如牛,原因多多,可能是网络的原因.可能是系统架构的原因,还有可能是数据库的原因. 那么如何提高数据库SQL语句执行速度呢?有人会说性能调优是数据库管理员(DBA)的事,然而性能调优跟程序员们 ...

  2. listview--Java泛型应用之打造Android万能ViewHolder-超简洁写法

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u010785585/article/details/52808656 转载请注明出处:http:// ...

  3. vue 用正则保护路由参数的合法性

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. 进程、线程与GIL全局解释器锁详解

    进程与线程的关系: . 线程是最小的调度单位 . 进程是最小的管理单元 . 一个进程必须至少一个线程 . 没有线程,进程也就不复存在 线程特点: 线程的并发是利用cpu上下文的切换(是并发,不是并行) ...

  5. 小程序2-基本架构讲解(一)JSON配置与详解

    项目里边生成了不同类型的文件: .json 后缀的 JSON 配置文件 .wxml 后缀的 WXML 模板文件 .wxss 后缀的 WXSS 样式文件 .js 后缀的 JS 脚本逻辑文件 JSON 配 ...

  6. 接口测试总结分享(http与rpc)

    接口测试是测试系统组件间接口的一种测试.接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点.测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻辑依赖关系等. 一.了 ...

  7. spring boot 给返回值加状态 BaseData

    JavaWeb开发中,需要给前端返回的数据加上一些头部的状态信息,来表示请求成功或失败的状态原因 一.数据添加状态信息 1.新建BaseData public class BaseData<T& ...

  8. leetcode每日刷题计划-简单篇day8

    今天是纠结要不要新买手机的一天QAQ想了想还是算了吧,等自己赚钱买,加油 Num 70 爬楼梯 Climbing Stairs class Solution { public: int climbSt ...

  9. Opencv与Qt (一)之运行测试读取图片

    刚刚在vs上装好了QT和Opencv,试一下效果把. 我简单的创建了一个label,然后使用Opencv导入图像,因为Opencv导入图像是MAT格式的,在使用Qt的时候我们要把导入的图像转换成Qim ...

  10. 2489 小b和灯泡

    2489 小b和灯泡 2 秒 262,144 KB 10 分 2 级题 小b有n个关闭的灯泡,编号为1...n. 小b会进行n轮操作,第i轮她会将编号为i的倍数的灯泡的开关状态取反,即开变成关,关变成 ...