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 脚本,则将运行 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 实现。