mozhttpd — 为浏览器提供内容

警告

mozhttpd 模块被认为已过时。对于新代码,请使用 wptserve,它可以完成 mozhttpd 的所有功能,甚至更多。

mozhttpd — 简单 Web 服务器

Mozhttpd 是一个用 Python 编写的简单 HTTP Web 服务器,专为自动化测试场景而设计。它旨在提供静态内容并提供简单的 Web 服务。

该服务器基于 Python 标准库模块,如 SimpleHttpServer、urlparse 等。ThreadingMixIn 用于在独立线程上服务每个请求。

Mozhttpd 的一些现有用法包括 PeptestEidetickerTalos

以下简单示例创建了一个基本的 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()

停止服务器。

如果服务器未运行,则此方法无效。