当前位置:首页 > 未分类 > 正文内容

Python3 CGI 编程

admin2025-03-06未分类392

什么是 CGI

CGI 目前由 NCSA 维护,NCSA 定义 CGI 如下:

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


网页浏览

为了更好的了解 CGI 是如何工作的,我们可以从在网页上点击一个链接或 URL 的流程:

  • 1、使用你的浏览器访问 URL 并连接到 HTTP web 服务器。

  • 2、Web 服务器接收到请求信息后会解析 URL,并查找访问的文件在服务器上是否存在,如果存在返回文件的内容,否则返回错误信息。

  • 3、浏览器从服务器上接收信息,并显示接收的文件或者错误信息。

CGI 程序可以是 Python 脚本,PERL 脚本,SHELL 脚本,C 或者 C++ 程序等。


CGI 架构图

cgiarch


Web 服务器支持及配置

在你进行 CGI 编程前,确保您的 Web 服务器支持 CGI 及已经配置了 CGI 的处理程序。

Apache 支持 CGI 配置(这里使用PHPstudy集成的Apache):

打开Apache的配置文件httpd-conf,在文件中找到如下内容:

首先找到ScriptAlias(图片内容为已经修改过的值,默认值应该有所不同而且是被注释掉的)


修改为项目地址 ScriptAlias /cgi-bin/ "F:/phpstudy/phpstudy_pro/WWW/webpy" (之前的项目都放在F:/phpstudy/phpstudy_pro/WWW/下,这个文件夹是PHPstudy的apache默认项目文件夹,将路径改为这样可以方便localhost访问)。

然后找到Directory,将其修改为

<Directory "F:/phpstudy/phpstudy_pro/WWW/webpy">    AllowOverride None    Options +ExecCGI    Order allow,deny    Allow from all  </Directory>

注意:这里的路径和上面设置的路径是一样的。

接着找到AddHandler


添加.py。使apache识别.py文件为cgi程序(图中已添加)。

接下来我们就可以在webpy文件夹下写pythonCGI程序了。


第一个CGI程序

我们使用 Python 创建第一个 CGI 程序,文件名为 hello.py,文件位于 /var/www/cgi-bin目录中,内容如下:

#!/usr/bin/python3 

# 请注意第一行代码,在linux中需要在py文件中正确指定python解释器的路径才能运行 # 在Windows中使用Python CGI文件也需要正确指定python解释器的路径才能运行

#coding=utf-8

print("Content-type:text/html") # 指定返回的类型,没有这行代码会报错

print()              # 空行,告诉服务器结束头部

# 以下是要返回的HTML正文 print ('<html>')

print ('<head>')

print ('<title>Hello Word - 我的第一个 CGI 程序!</title>')

print ('</head>')

print ('<body>')

print ('<h2>Hello Word! 我的第一CGI程序</h2>')

print ('</body>')

print ('</html>')

文件保存后修改 hello.py,修改文件权限为 755(linux和macos需要在webpy文件夹下使用下面的命令来修改文件读写权限,在Windows环境下需要修改文件的读写权限):

chmod 755 hello.py

以上程序在浏览器访问显示结果如下:


这个的 hello.py 脚本是一个简单的 Python 脚本,脚本第一行的输出内容"Content-type:text/html"发送到浏览器并告知浏览器显示的内容类型为"text/html"。

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

注:如果此处出现乱码,可以在打印html的时候打印,在下文部分代码中有所体现(注意,这里不使用UTF-8的原因是小编在这里使用utf-8出现乱码,这是因为小编的系统是Windows系统,系统默认字符集是GBK,所以会出现乱码)。

另外:请注意第一行代码,在linux中需要在py文件中正确指定python解释器的路径才能运行 。在Windows中使用Python CGI文件也需要正确指定python解释器的路径才能运行


HTTP头部

hello.py 文件内容中的" Content-type:text/html"即为 HTTP 头部的一部分,它会发送给浏览器告诉浏览器文件的内容类型。

HTTP 头部的格式如下:

HTTP 字段名: 字段内容

例如:

Content-type: text/html

以下表格介绍了 CGI 程序中 HTTP 头部经常使用的信息:

描述
Content-type:请求的与