Python3 CGI 编程

2023-11-07

什么是 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 架构图


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: 请求的与实体对应的 MIME 信息。例如: Content-type:text/html
Expires: Date 响应过期的日期和时间
Location: URL 用来重定向接收方到非请求URL的位置来完成请求或标识新的资源
Last-modified: Date 请求资源的最后修改时间
Content-length: N 请求的内容长度
Set-Cookie: String 设置 Http Cookie

CGI 环境变量

所有的 CGI 程序都接收以下的环境变量,这些变量在 CGI 程序中发挥了重要的作用:

变量名 描述
CONTENT_TYPE 这个环境变量的值指示所传递来的信息的 MIME 类型。目前,环境变量 CONTENT_TYPE 一般都是:application/x-www-form-urlencoded,他表示数据来自于 HTML 表单。
CONTENT_LENGTH 如果服务器与 CGI 程序信息的传递方式是 POST,这个环境变量即使从标准输入 STDIN 中可以读到的有效数据的字节数。这个环境变量在读取所输入的数据时必须使用。
HTTP_COOKIE 客户机内的 COOKIE 内容。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python3 CGI 编程 的相关文章

随机推荐

  • 微信小程序SLAM AR零基础入门教程

    鬼灭之刃花街篇 开播在即 今天带大家零基础使用Kivicube制作一个炭治郎的SLAM AR云手办 可以通过微信小程序将AR版的炭治郎放置在家中 提前感受鬼灭的氛围 先上个GIF大家看看动态的展示效果 在这里先科普一下本次教程使用到的AR技
  • Kendo UI开发教程(19): Kendo MVVM 数据绑定(八) Style

    Style绑定可以通过ViewModel绑定到DOM元素CSS风格属性 例如 1
  • 免费云服务器

    三丰云 免费虚拟主机 免费云服务器 https www sanfengyun com 一个良心服务器 可以通过活动 免费使用 特别适合大学生或者想尝试一下后端学习的朋友 今天我就分享一下使用这个服务器的感受 首先我选着配置了 CentOS
  • 51单片机播放音乐(二):DA转换播放任意波形

    51单片机播放音乐 二 DA转换播放任意波形 原理 DA转换器 仿真电路图 音频文件转成C语言数组代码 单片机代码 仿真输出波形 本文完整源码 用数字信号带动蜂鸣器同一时间只能发出一种频率的声音 也没有和弦 会比较难听 而我们听到的音乐可以
  • PNG透明窗体全攻略(控件不透明)vc++程序指导

    这两天在研究透明窗体 总算略有小成 网上大部分文章都是介绍到把窗体弄透明就没有下文 其实窗体透明并不难 难就难在透明的窗体上还要放控件 今 天我就把窗体透明一直到控件不透明怎么制作一块给写了吧 先截张图诱惑下你们 如果你没兴趣就没必要再看下
  • stm32 使用keil无实物(软件)仿真,虚拟串口通讯

    准备 1 keil 2 vspd虚拟串口 3 sscom串口助手 4 CubeMX 哪里报错no read permission 把哪里map一下 map 0x40000000 0x400077FF read write APB1 map
  • Cocos2d摄像机详解

    Cocos2d摄像机详解 摄像机的作用 在3D系统中都会有一个摄像机的概念 物体在显示之前需要先将物体的坐标转换到视角坐标 也就是摄像机坐标 然后再投影 最后还需对投影画面进行缩放到视口显示的大小 Coscos2d x 3 x支持3D的 所
  • 接口报错500是什么意思_http500什么意思

    展开全部 http500指的是内部服务器错误 说明IIS服务器无法解析e68a84e8a2ad3231313335323631343130323136353331333433623161ASP代码 1 出现http500代码的情况 当访问网
  • 在js文件中引入(调用)另一个js文件的三种方法

    方法一 在调用文件的顶部加入下例代码 function addScript url document write 注 有时你引用的文件还可能需要引用其他的js 我们需要将需要的那个js文件也以同样的方法引用进来 方法二 在js中写如下代码
  • 最好的6个Go语言Web框架

    原文 Top 6 web frameworks for Go as of 2017 作者 Edward Marinescu 译者 roy 译者注 本文介绍截至目前 2017年 最好的6个Go语言Web框架 以下为译文 GO 语言爱好者的最佳
  • 华为OD机试 - 恢复数字序列(Java)

    题目描述 对于一个连续正整数组成的序列 可以将其拼接成一个字符串 再将字符串里的部分字符打乱顺序 如序列8 9 10 11 12 拼接成的字符串为89101112 打乱一部分字符后得到90811211 原来的正整数10就被拆成了0和1 现给
  • 【JAVA】log4j.xml详解

    Appender Appender 日志输出器 配置日志的输出级别 输出位置等 包括以下几类 ConsoleAppender 日志输出到控制台 FileAppender 输出到文件 RollingFileAppender 输出到文件 文件达
  • react:重置清除数据的方法

    描述如下 1 页面进来没有数据 只有输入条件的情况下 才能查询数据 2 查询条件有重置功能 问题 重置功能如何操作呢 数据是从 this props 中取到的 在重置的时候 1 方法一 不调接口 this props xxx 或者 this
  • 读文件 —— WEB前端读取本地文件内容哪些事(前台解析txt文件)…… – 杰儿__er 的博客 – CSDN博客...

    文章目录 隐藏 读文件 WEB前端读取本地文件内容哪些事 前台解析txt文件 参考链接 https blog csdn net pl1612127 article details 77862174可供参考的链接 https zhidao b
  • android dialog对话框,Android Dialog对话框详解

    废话不多说了 直接给大家贴代码了 布局文件xml xmlns tools http schemas android com tools android layout width match parent android layout hei
  • Windows下使用命令行登陆、操作MYSQL5.7数据库

    一 运行数据库 1 启动服务 net start mysql 2 连接数据库 mysql h IP地址 u 数据库 p mysql u 数据库 p 如 mysql u root p mysql h127 0 0 1 u root p 二 查
  • IntelliJ IDEA提示Unable to resolve table ‘表名‘

    一 说明 我几乎看了CSDN所有大神的解答 尝试之后都无效 通过自己研究 终于解决此问题 遂在此记录 二 我的解决方案 在正常使用IntelliJ IDEA连接到数据库后 SQL语句提示Unable to resolve table 表名
  • 两个数字相加的代码

    内容 include
  • mac os x 使用外接摄像头

    参考 http bbs feng com read htm tid 2745586 html http www jb51 net os MAC 470090 html 1 打开macbook 自带程序Photo Booth 2 在左上工具条
  • Python3 CGI 编程

    什么是 CGI CGI 目前由 NCSA 维护 NCSA 定义 CGI 如下 CGI Common Gateway Interface 通用网关接口 它是一段程序 运行在服务器上如 HTTP服务器 提供同客户端 HTML 页面的接口 网页浏