20.20. CGIHTTPServer — 支持 CGI 的 HTTP 请求处理程序 — Python 文档

来自菜鸟教程
Python/docs/2.7/library/cgihttpserver
跳转至:导航、​搜索

20.20. CGIHTTP服务器 — 支持 CGI 的 HTTP 请求处理程序

笔记

CGIHTTPServer 模块已合并到 Python 3 中的 http.server2to3 工具将在将您的源代码转换为 Python 3 时自动调整导入。


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()函数的实现。

也可以看看

模块 BaseHTTPServer
Web 服务器和请求处理程序的基类实现。