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

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

20.19. 简单HTTP服务器 — 简单的 HTTP 请求处理程序

笔记

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


警告

SimpleHTTPServer 不推荐用于生产。 它只实现基本的安全检查。


SimpleHTTPServer 模块定义了一个类,SimpleHTTPRequestHandler,它与 BaseHTTPServer.BaseHTTPRequestHandler 接口兼容。

SimpleHTTPServer 模块定义了以下类:

class SimpleHTTPServer.SimpleHTTPRequestHandler(request, client_address, server)

此类提供来自当前目录及以下目录的文件,直接将目录结构映射到 HTTP 请求。

很多工作,比如解析请求,都是由基类BaseHTTPServer.BaseHTTPRequestHandler来完成的。 这个类实现了 do_GET()do_HEAD() 函数。

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

server_version

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

extensions_map

字典映射后缀到 MIME 类型。 默认值由空字符串表示,被认为是 application/octet-stream。 映射不区分大小写,因此应该只包含小写的键。

SimpleHTTPRequestHandler 类定义了以下方法:

do_HEAD()

此方法服务于 'HEAD' 请求类型:它发送它会为等效的 GET 请求发送的标头。 有关可能的标头的更完整说明,请参阅 do_GET() 方法。

do_GET()

通过将请求解释为相对于当前工作目录的路径,将请求映射到本地文件。

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

如果请求被映射到一个文件,它会被打开并返回内容。 打开请求文件时的任何 IOError 异常都映射到 404'File not found' 错误。 否则,通过调用 guess_type() 方法猜测内容类型,该方法又使用 extensions_map 变量。

输出带有猜测内容类型的 'Content-type:' 标头,然后是带有文件大小的 'Content-Length:' 标头和带有文件修改时间的 'Last-Modified:' 标头。

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

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

2.5 版新增:'Last-Modified' 标头。

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

import SimpleHTTPServer
import SocketServer

PORT = 8000

Handler = SimpleHTTPServer.SimpleHTTPRequestHandler

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

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

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

python -m SimpleHTTPServer 8000

也可以看看

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