20.19. SimpleHTTPServer —简单的 HTTP 请求处理程序

Note

SimpleHTTPServer模块已在 Python 3 中合并到http.server中。2to3工具在将源转换为 Python 3 时将自动适应导入。

Warning

不建议将SimpleHTTPServer用于生产。它仅实现基本的安全检查。

SimpleHTTPServer模块定义单个类SimpleHTTPRequestHandler,该类与BaseHTTPServer.BaseHTTPRequestHandler接口兼容。

SimpleHTTPServer模块定义以下类:

    • class * SimpleHTTPServer. SimpleHTTPRequestHandler(* request client_address server *)
    • 此类提供当前目录及以下目录中的文件,直接将目录结构 Map 到 HTTP 请求。

Base ClassBaseHTTPServer.BaseHTTPRequestHandler完成了很多工作,例如解析请求。此类实现do_GET()do_HEAD()函数。

以下定义为SimpleHTTPRequestHandler的类级属性:

  • server_version

这将是"SimpleHTTP/" + __version__,其中__version__是在模块级别定义的。

  • extensions_map
    • 字典 Map 后缀为 MIME 类型。默认值由空字符串表示,并被视为application/octet-stream。Map 不区分大小写,因此应仅包含小写字母的键。

SimpleHTTPRequestHandler类定义以下方法:

  • do_HEAD ( )

    • 此方法提供'HEAD'请求类型:它发送将为等效的GET请求发送的 Headers。有关可能的标题的更完整说明,请参见do_GET()方法。
  • do_GET ( )

    • pass将请求解释为相对于当前工作目录的路径,将请求 Map 到本地文件。

如果请求已 Map 到目录,则会在目录中检查名为index.htmlindex.htm的文件(按此 Sequences)。如果找到,则返回文件的内容;否则,pass调用list_directory()方法生成目录列表。此方法使用os.listdir()扫描目录,如果listdir()失败,则返回404错误响应。

如果请求已 Map 到文件,则将其打开并返回内容。打开请求的文件中的任何IOError异常都将 Map 到404'File not found'错误。否则,pass调用guess_type()方法来猜测 Content Type,该方法又使用* extensions_map *变量。

输出具有猜想的 Content Type 的'Content-type:'Headers,然后输出具有文件大小的'Content-Length:'Headers 和具有文件修改时间的'Last-Modified:'Headers。

然后跟随一个空白行,表示标题的末尾,然后输出文件的内容。如果文件的 MIME 类型以text/开头,则以文本模式打开文件;否则使用二进制模式。

SimpleHTTPServer模块中的test()函数是使用SimpleHTTPRequestHandler作为处理程序创建服务器的示例。

2.5 版中的新Function:'Last-Modified'Headers。

可以按以下方式使用SimpleHTTPServer模块,以设置一个非常基本的 Web 服务器来提供相对于当前目录的文件。

import SimpleHTTPServer
import SocketServer

PORT = 8000

Handler = SimpleHTTPServer.SimpleHTTPRequestHandler

httpd = SocketServer.TCPServer(("", PORT), Handler)

print "serving at port", PORT
httpd.serve_forever()

也可以使用带port number参数的解释器的-m开关直接调用SimpleHTTPServer模块。与前面的示例类似,这将提供相对于当前目录的文件。

python -m SimpleHTTPServer 8000

See also

  • Module BaseHTTPServer

  • Web 服务器和请求处理程序的 Base Class 实现。