20.19. SimpleHTTPServer — 简单的 HTTP 请求处理程序 — Python 文档
20.19. 简单HTTP服务器 — 简单的 HTTP 请求处理程序
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.html
或index.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