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

Note

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

Warning

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

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

SimpleHTTPServer模块定义以下类:

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

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

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

SimpleHTTPRequestHandler类定义以下方法:

如果请求已 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 实现。

首页