Python3 CGI编程
Python3 学习笔记 · 整理自菜鸟教程
一句话
CGI(Common Gateway Interface,公共网关接口)是 Web 服务器把请求交给外部程序处理并返回结果的标准接口,Python 脚本加 cgi 模块即可写 CGI 程序。
要点
- CGI 程序本质是普通脚本,通过 HTTP 请求被服务器调用,输出要符合 HTTP 协议格式。
- 第一行固定为
#!/usr/bin/python3(shebang),文件可执行(chmod +x)。
- 输出以
Content-type: text/html\r\n\r\n 开头,空行之后才是页面内容,否则浏览器可能显示 “500 Internal Server Error” 或空白。
- 表单数据:GET 在 URL 查询串中,POST 在请求体中,
cgi.FieldStorage() 统一解析。
- 环境变量
QUERY_STRING、REQUEST_METHOD、REMOTE_ADDR 等携带请求信息。
- 现代开发多被 WSGI/框架替代,但 CGI 概念仍是理解 Web 编程的基础。
语法 / 常用方法
| 语法/方法 |
说明 |
示例 |
#!/usr/bin/python3 |
脚本解释器声明,必须第一行 |
文件开头 |
cgi.FieldStorage() |
解析 GET/POST 表单数据,返回字典式对象 |
form = cgi.FieldStorage() |
form.getvalue('name') |
取单个字段值 |
name = form.getvalue('name') |
form['field'] |
取字段对象(可能是列表,多值时) |
f = form['hobby'] |
cgi.test() |
打印当前 CGI 环境信息,用于调试 |
cgi.test() |
cgi.escape(text) |
转义 HTML 特殊字符(Python3.8 起废弃,用 html.escape) |
html.escape(s) |
sys.exit() |
提前结束脚本 |
出错时用 |
环境变量 os.environ |
读取服务器传入的环境变量 |
os.environ['REMOTE_ADDR'] |
代码示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
import cgi
print("Content-type: text/html") print() print("<html><head><title>Hello CGI</title></head><body>") print("<h2>Hello, World!</h2>")
form = cgi.FieldStorage() name = form.getvalue('name', '游客') print(f"<p>你好,{name}!</p>")
import json print("<p>" + json.dumps({'name': name, 'status': 'ok'}) + "</p>") print("</body></html>")
|
易错点
- 忘了在 HTTP 头后输出空行(
print() 不带参数),浏览器会报错或显示乱码。
- 脚本没有执行权限或首行 shebang 路径不对,服务器返回 500。
- 输出顺序不能乱:所有 HTTP 头必须先于正文输出。
- 中文输出要保证编码一致,CGI 头可用
Content-type: text/html; charset=utf-8。
cgi.escape 已废弃,转义 HTML 请用 html.escape()。
- 文件路径、文件名含空格或特殊字符,服务器可能找不到脚本。