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