mozhttpd
— 为浏览器提供内容¶
警告
mozhttpd 模块被认为已过时。对于新代码,请使用 wptserve,它可以完成 mozhttpd 的所有功能,甚至更多。
mozhttpd
— 简单 Web 服务器¶
Mozhttpd 是一个用 Python 编写的简单 HTTP Web 服务器,专为自动化测试场景而设计。它旨在提供静态内容并提供简单的 Web 服务。
该服务器基于 Python 标准库模块,如 SimpleHttpServer、urlparse 等。ThreadingMixIn 用于在独立线程上服务每个请求。
Mozhttpd 的一些现有用法包括 Peptest、Eideticker 和 Talos。
以下简单示例创建了一个基本的 HTTP 服务器,该服务器提供来自当前目录的内容,定义了一个单一的 API 端点 /api/resource/<resourceid>,然后无限期地提供服务
import mozhttpd
@mozhttpd.handlers.json_response
def resource_get(request, objid):
return (200, { 'id': objid,
'query': request.query })
httpd = mozhttpd.MozHttpd(port=8080, docroot='.',
urlhandlers = [ { 'method': 'GET',
'path': '/api/resources/([^/]+)/?',
'function': resource_get } ])
print "Serving '%s' at %s:%s" % (httpd.docroot, httpd.host, httpd.port)
httpd.start(block=True)
- class mozhttpd.MozHttpd(host='127.0.0.1', port=0, docroot=None, urlhandlers=None, path_mappings=None, proxy_host_dirs=False, log_requests=False)¶
- 参数:
host – 提供服务的宿主 (默认为 127.0.0.1)
port – 提供服务的端口 (默认为 8888)
docroot – 服务器根目录 (默认为 os.getcwd())
urlhandlers – 用于指定针对方法和路径匹配的行为的处理程序 (默认为 None)
path_mappings – 将 URL 前缀映射到其他磁盘路径的字典。
proxy_host_dirs – 切换代理行为 (默认为 False)
log_requests – 切换日志记录行为 (默认为 False)
非常基本的 HTTP 服务器类。接收一个 docroot(文件系统上的路径)和一组 urlhandler 字典,格式为
{ 'method': HTTP method (string): GET, POST, or DEL, 'path': PATH_INFO (regular expression string), 'function': function of form fn(arg1, arg2, arg3, ..., request) }
并提供 HTTP 服务。对于每个请求,MozHttpd 将要么返回 docroot 上的文件,要么分派到处理程序函数(如果路径和方法都匹配)。
请注意,docroot 或 urlhandlers 之一可以为 None(在这种情况下,将分别不使用本地文件或处理程序)。如果 docroot 和 urlhandlers 都为 None,则 MozHttpd 将默认为仅提供本地目录。
MozHttpd 还处理代理请求(即请求行上带有完整 URI)。默认情况下,文件根据请求 URI 的路径组件从 docroot 提供服务,但如果 proxy_host_dirs 为 True,则文件将从 <self.docroot>/<host>/ 提供服务。
例如,请求“GET http://foo.bar/dir/file.html”将(假设没有处理程序匹配)提供 <docroot>/dir/file.html(如果 proxy_host_dirs 为 False),或者 <docroot>/foo.bar/dir/file.html(如果为 True)。
- get_url(path='/')¶
返回可用于访问服务器的 URL(例如 http://192.168.1.3:4321/)
- 参数:
path – 要附加到 URL 的路径(例如,如果路径为 /foobar.html,则您将获得一个类似于 http://192.168.1.3:4321/foobar.html 的 URL)。默认为 /。
- start(block=False)¶
启动服务器。
如果 block 为 True,则调用将不会返回。如果 block 为 False,则服务器将在一个单独的线程上启动,可以通过调用 stop() 来终止该线程。
- stop()¶
停止服务器。
如果服务器未运行,则此方法无效。
- class mozhttpd.Request(uri, headers, rfile=None)¶
请求的详细信息。
- class mozhttpd.RequestHandler(*args, **kwargs)¶
- address_string()¶
返回客户端地址。
- do_GET()¶
提供 GET 请求的服务。
- log_message(format, *args)¶
记录任意消息。
所有其他日志记录函数都使用此函数。如果您有特定的日志记录需求,请覆盖它。
第一个参数 FORMAT 是要记录的消息的格式字符串。如果格式字符串包含任何需要参数的 % 转义,则应将其指定为后续参数(就像 printf 一样!)。
客户端 IP 和当前日期/时间会作为前缀添加到每条消息中。
Unicode 控制字符在写入 stderr 之前将替换为转义的十六进制。
- parse_request()¶
解析请求(内部)。
请求应存储在 self.raw_requestline 中;结果位于 self.command、self.path、self.request_version 和 self.headers 中。
如果成功则返回 True,如果失败则返回 False;如果失败,则任何相关的错误响应已发送回。
- translate_path(path)¶
将以 / 分隔的 PATH 转换为本地文件名语法。
对本地文件系统具有特殊含义的组件(例如驱动器或目录名称)将被忽略。(XXX 它们可能应该被诊断。)
- mozhttpd.json_response(func)¶
将“func”的结果转换为 JSON 响应。
接口¶
- class mozhttpd.MozHttpd(host='127.0.0.1', port=0, docroot=None, urlhandlers=None, path_mappings=None, proxy_host_dirs=False, log_requests=False)¶
- 参数:
host – 提供服务的宿主 (默认为 127.0.0.1)
port – 提供服务的端口 (默认为 8888)
docroot – 服务器根目录 (默认为 os.getcwd())
urlhandlers – 用于指定针对方法和路径匹配的行为的处理程序 (默认为 None)
path_mappings – 将 URL 前缀映射到其他磁盘路径的字典。
proxy_host_dirs – 切换代理行为 (默认为 False)
log_requests – 切换日志记录行为 (默认为 False)
非常基本的 HTTP 服务器类。接收一个 docroot(文件系统上的路径)和一组 urlhandler 字典,格式为
{ 'method': HTTP method (string): GET, POST, or DEL, 'path': PATH_INFO (regular expression string), 'function': function of form fn(arg1, arg2, arg3, ..., request) }
并提供 HTTP 服务。对于每个请求,MozHttpd 将要么返回 docroot 上的文件,要么分派到处理程序函数(如果路径和方法都匹配)。
请注意,docroot 或 urlhandlers 之一可以为 None(在这种情况下,将分别不使用本地文件或处理程序)。如果 docroot 和 urlhandlers 都为 None,则 MozHttpd 将默认为仅提供本地目录。
MozHttpd 还处理代理请求(即请求行上带有完整 URI)。默认情况下,文件根据请求 URI 的路径组件从 docroot 提供服务,但如果 proxy_host_dirs 为 True,则文件将从 <self.docroot>/<host>/ 提供服务。
例如,请求“GET http://foo.bar/dir/file.html”将(假设没有处理程序匹配)提供 <docroot>/dir/file.html(如果 proxy_host_dirs 为 False),或者 <docroot>/foo.bar/dir/file.html(如果为 True)。
- get_url(path='/')¶
返回可用于访问服务器的 URL(例如 http://192.168.1.3:4321/)
- 参数:
path – 要附加到 URL 的路径(例如,如果路径为 /foobar.html,则您将获得一个类似于 http://192.168.1.3:4321/foobar.html 的 URL)。默认为 /。
- start(block=False)¶
启动服务器。
如果 block 为 True,则调用将不会返回。如果 block 为 False,则服务器将在一个单独的线程上启动,可以通过调用 stop() 来终止该线程。
- stop()¶
停止服务器。
如果服务器未运行,则此方法无效。