On this page
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 请求。
- class *
Base ClassBaseHTTPServer.BaseHTTPRequestHandler完成了很多工作,例如解析请求。此类实现do_GET()和do_HEAD()函数。
以下定义为SimpleHTTPRequestHandler的类级属性:
server_version
这将是"SimpleHTTP/" + __version__
,其中__version__
是在模块级别定义的。
extensions_map
- 字典 Map 后缀为 MIME 类型。默认值由空字符串表示,并被视为
application/octet-stream
。Map 不区分大小写,因此应仅包含小写字母的键。
- 字典 Map 后缀为 MIME 类型。默认值由空字符串表示,并被视为
SimpleHTTPRequestHandler类定义以下方法:
do_HEAD
( )- 此方法提供
'HEAD'
请求类型:它发送将为等效的GET
请求发送的 Headers。有关可能的标题的更完整说明,请参见do_GET()方法。
- 此方法提供
do_GET
( )- pass将请求解释为相对于当前工作目录的路径,将请求 Map 到本地文件。
如果请求已 Map 到目录,则会在目录中检查名为index.html
或index.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 实现。