20.20. CGIHTTPServer — 支持 CGI 的 HTTP 请求处理程序 — Python 文档
20.20. CGIHTTP服务器 — 支持 CGI 的 HTTP 请求处理程序
CGIHTTPServer 模块定义了一个请求处理程序类,接口与 BaseHTTPServer.BaseHTTPRequestHandler 兼容并继承了 SimpleHTTPServer.SimpleHTTPRequestHandler 的行为,但也可以运行 CGI 脚本。
笔记
该模块可以在 Unix 和 Windows 系统上运行 CGI 脚本。
笔记
CGIHTTPRequestHandler 类运行的 CGI 脚本无法执行重定向(HTTP 代码 302),因为代码 200(脚本输出如下)是在执行 CGI 脚本之前发送的。 这会抢占状态代码。
CGIHTTPServer 模块定义了以下类:
- class CGIHTTPServer.CGIHTTPRequestHandler(request, client_address, server)
此类用于提供当前目录及以下目录中的文件或 CGI 脚本的输出。 请注意,将 HTTP 层次结构映射到本地目录结构与 SimpleHTTPServer.SimpleHTTPRequestHandler 中的完全相同。
但是,如果该类猜测它是 CGI 脚本,则该类将运行 CGI 脚本,而不是将其作为文件提供。 仅使用基于目录的 CGI — 另一个常见的服务器配置是将特殊扩展视为表示 CGI 脚本。
do_GET()
和do_HEAD()
函数被修改为运行 CGI 脚本并提供输出,而不是提供文件,如果请求指向cgi_directories
路径下方的某处。CGIHTTPRequestHandler 定义了以下数据成员:
- cgi_directories
默认为
['/cgi-bin', '/htbin']
并描述要视为包含 CGI 脚本的目录。
CGIHTTPRequestHandler 定义了以下方法:
- do_POST()
此方法服务于
'POST'
请求类型,仅允许用于 CGI 脚本。 尝试 POST 到非 CGI url 时会输出错误 501,“只能 POST 到 CGI 脚本”。
请注意,出于安全原因,CGI 脚本将使用用户 nobody 的 UID 运行。 CGI 脚本的问题将转换为错误 403。
例如用法,参见test()函数的实现。