首页 > 技术文章 > Python CGI编程

jiawei2527 2019-04-22 23:25 原文

      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,用于程序下载

 

浏览器访问结果

推荐阅读