Skip to main content

tornado.httputil —处理HTTP标头和网址

客户端和服务器共享的HTTP实用程序代码。

该模块还定义通过 tornado.web.RequestHandler.request 公开的 HTTPServerRequest 类。

class tornado.httputil.HTTPHeaders(*args, **kwargs)[源代码]

为所有键维护 Http-Header-Case 的字典。

通过一对新方法(add()get_list())支持每个键的多个值。常规字典接口为每个键返回单个值,多个值由逗号连接。

>>> h = HTTPHeaders({"content-type": "text/html"})
>>> list(h.keys())
['Content-Type']
>>> h["Content-Type"]
'text/html'
>>> h.add("Set-Cookie", "A=B")
>>> h.add("Set-Cookie", "C=D")
>>> h["set-cookie"]
'A=B,C=D'
>>> h.get_list("set-cookie")
['A=B', 'C=D']
>>> for (k,v) in sorted(h.get_all()):
...    print('%s: %s' % (k,v))
...
Content-Type: text/html
Set-Cookie: A=B
Set-Cookie: C=D
add(name, value)[源代码]

为给定的键添加一个新值。

get_list(name)[源代码]

返回给定头的所有值作为列表。

get_all()[源代码]

返回所有(名称,值)对的可迭代。

如果头有多个值,将返回多个具有相同名称的对。

parse_line(line)[源代码]

使用单个标题行更新字典。

>>> h = HTTPHeaders()
>>> h.parse_line("Content-Type: text/html")
>>> h.get('content-type')
'text/html'
classmethod parse(headers)[源代码]

从HTTP标头文本返回字典。

>>> h = HTTPHeaders.parse("Content-Type: text/html\r\nContent-Length: 42\r\n")
>>> sorted(h.items())
[('Content-Length', '42'), ('Content-Type', 'text/html')]
class tornado.httputil.HTTPServerRequest(method=None, uri=None, version='HTTP/1.0', headers=None, body=None, host=None, files=None, connection=None, start_line=None)[源代码]

单个HTTP请求。

除非另有说明,所有属性都是 str 类型。

method

HTTP请求方法,例如“GET”或“POST”

uri

请求的uri。

path

uri 的路径部分

query

uri 的查询部分

version

在请求中指定的HTTP版本,例如“HTTP/1.1”

headers

请求标头的 HTTPHeaders 字典对象。行为像一个不区分大小写的字典与额外的方法重复头。

body

请求正文(如果存在)为字节字符串。

remote_ip

客户端的IP地址作为字符串。如果设置了 HTTPServer.xheaders,将传递由 X-Real-IpX-Forwarded-For 头中的负载均衡器提供的真实IP地址。

在 3.1 版更改: 现在支持 X-Forwarded-For 的列表格式。

protocol

使用的协议,“http”或“https”。如果设置了 HTTPServer.xheaders,将通过负载均衡器使用的协议(如果通过 X-Scheme 头报告)。

host

请求的主机名,通常取自 Host 头。

arguments

GET/POST参数在arguments属性中可用,它将参数名称映射到值列表(以支持单个名称的多个值)。名称的类型为 str,而参数为字节字符串。注意,这不同于 RequestHandler.get_argument,它将参数值作为unicode字符串返回。

query_arguments

arguments 格式相同,但只包含从查询字符串中提取的参数。

3.2 新版功能.

body_arguments

arguments 格式相同,但只包含从请求正文中提取的参数。

3.2 新版功能.

files

文件上传在files属性中可用,它将文件名映射到 HTTPFile 列表。

connection

HTTP请求附加到单个HTTP连接,可以通过“connection”属性访问。由于连接通常在HTTP/1.1中保持打开,因此可以在单个连接上顺序处理多个请求。

在 4.0 版更改: tornado.httpserver.HTTPRequest 移动。

supports_http_1_1()[源代码]

如果此请求支持HTTP/1.1语义,则返回True。

4.0 版后已移除: 应用程序不太可能需要此信息与 HTTPConnection 的介绍。如果您仍需要它,请直接访问 version 属性。

cookies

Cookie.Morsel对象的字典。

write(chunk, callback=None)[源代码]

将给定的块写入响应流。

4.0 版后已移除: 使用 request.connectionHTTPConnection 方法写入响应。

finish()[源代码]

在打开的连接上完成此HTTP请求。

4.0 版后已移除: 使用 request.connectionHTTPConnection 方法写入响应。

full_url()[源代码]

重新构造此请求的完整URL。

request_time()[源代码]

返回此请求执行所花费的时间。

get_ssl_certificate(binary_form=False)[源代码]

返回客户端的SSL证书(如果有)。

要使用客户端证书,必须设置HTTPServer的 ssl.SSLContext.verify_mode 字段,例如:

ssl_ctx = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
ssl_ctx.load_cert_chain("foo.crt", "foo.key")
ssl_ctx.load_verify_locations("cacerts.pem")
ssl_ctx.verify_mode = ssl.CERT_REQUIRED
server = HTTPServer(app, ssl_options=ssl_ctx)

默认情况下,返回值是字典(如果没有客户端证书,则为None)。如果 binary_form 为true,则返回证书的DER编码形式。有关更多详细信息,请参阅标准库中的SSLSocket.getpeercert()。 http://docs.python.org/library/ssl.html#sslsocket-objects

exception tornado.httputil.HTTPInputError[源代码]

来自远程源的格式不正确的HTTP请求或响应的异常类。

4.0 新版功能.

exception tornado.httputil.HTTPOutputError[源代码]

HTTP输出中的错误的异常类。

4.0 新版功能.

class tornado.httputil.HTTPServerConnectionDelegate[源代码]

实现此接口以处理来自 HTTPServer 的请求。

4.0 新版功能.

start_request(server_conn, request_conn)[源代码]

当新请求开始时,服务器调用此方法。

参数:
  • server_conn – 是表示长期(例如,tcp级别)连接的不透明对象。
  • request_conn – 是用于单个请求/响应交换的 HTTPConnection 对象。

此方法应返回 HTTPMessageDelegate

on_close(server_conn)[源代码]

当连接已关闭时调用此方法。

参数:server_conn – 是先前已传递到 start_request 的服务器连接。
class tornado.httputil.HTTPMessageDelegate[源代码]

实现此接口以处理HTTP请求或响应。

4.0 新版功能.

headers_received(start_line, headers)[源代码]

在接收和解析HTTP头时调用。

参数:

一些 HTTPConnection 方法只能在 headers_received 期间调用。

可能返回 Future;如果它的身体将不会被读取,直到它完成。

data_received(chunk)[源代码]

在接收到一块数据时调用。

可以返回用于流控制的 Future

finish()[源代码]

在接收到最后一块数据后调用。

on_connection_close()[源代码]

如果连接已关闭而未完成请求,则调用。

如果调用 headers_received,则将调用 finishon_connection_close,但不会同时调用。

class tornado.httputil.HTTPConnection[源代码]

应用程序使用此接口来写入其响应。

4.0 新版功能.

write_headers(start_line, headers, chunk=None, callback=None)[源代码]

写一个HTTP头块。

参数:
  • start_lineRequestStartLineResponseStartLine
  • headersHTTPHeaders 实例。
  • chunk – 第一个(可选)数据块。这是一个优化,以便小的响应可以写在与其头部相同的调用中。
  • callback – 当写入完成时要运行的回调。

忽略 start_lineversion 字段。

如果没有回调,返回 Future

write(chunk, callback=None)[源代码]

写入一块主体数据。

写入完成后,将运行回调。如果没有回调,返回一个Future。

finish()[源代码]

表示最后的正文数据已写入。

tornado.httputil.url_concat(url, args)[源代码]

连接网址和参数,无论网址是否具有现有的查询参数。

args 可以是字典或键值对的列表(后者允许具有相同键的多个值)。

>>> url_concat("http://example.com/foo", dict(c="d"))
'http://example.com/foo?c=d'
>>> url_concat("http://example.com/foo?a=b", dict(c="d"))
'http://example.com/foo?a=b&c=d'
>>> url_concat("http://example.com/foo?a=b", [("c", "d"), ("c", "d2")])
'http://example.com/foo?a=b&c=d&c=d2'
class tornado.httputil.HTTPFile[源代码]

表示通过表单上传的文件。

为了向后兼容,其实例属性也可作为字典键访问。

  • filename

  • body

  • content_type

tornado.httputil.parse_body_arguments(content_type, body, arguments, files, headers=None)[源代码]

解析表单请求正文。

支持 application/x-www-form-urlencodedmultipart/form-datacontent_type 参数应为字符串,body 应为字节字符串。 argumentsfiles 参数是将使用解析的内容更新的字典。

tornado.httputil.parse_multipart_form_data(boundary, data, arguments, files)[源代码]

解析 multipart/form-data 主体。

boundarydata 参数都是字节字符串。参数和文件参数中给出的字典将使用正文的内容更新。

tornado.httputil.format_timestamp(ts)[源代码]

以HTTP使用的格式设置时间戳。

参数可以是由 time.time 返回的数字时间戳,由 time.gmtime 返回的时间元组或 datetime.datetime 对象。

>>> format_timestamp(1359312200)
'Sun, 27 Jan 2013 18:43:20 GMT'
class tornado.httputil.RequestStartLine

RequestStartLine(方法,路径,版本)

创建RequestStartLine的新实例(方法,路径,版本)

method

字段号0的别名

path

字段号1的别名

version

字段2的别名

tornado.httputil.parse_request_start_line(line)[源代码]

返回HTTP 1.x请求行的(方法,路径,版本)元组。

响应是 collections.namedtuple

>>> parse_request_start_line("GET /foo HTTP/1.1")
RequestStartLine(method='GET', path='/foo', version='HTTP/1.1')
class tornado.httputil.ResponseStartLine

ResponseStartLine(版本,代码,原因)

创建ResponseStartLine的新实例(版本,代码,原因)

code

字段号1的别名

reason

字段2的别名

version

字段号0的别名

tornado.httputil.parse_response_start_line(line)[源代码]

返回HTTP 1.x响应行的(版本,代码,原因)元组。

响应是 collections.namedtuple

>>> parse_response_start_line("HTTP/1.1 200 OK")
ResponseStartLine(version='HTTP/1.1', code=200, reason='OK')
tornado.httputil.split_host_and_port(netloc)[源代码]

netloc 返回 (host, port) 元组。

如果不存在,返回的 port 将是 None

4.1 新版功能.

Cookie HTTP头解析为名称/值对的dict。

此函数尝试模仿浏览器cookie解析行为;它具体不遵循任何cookie相关RFC(因为浏览器不会)。

使用的算法与Django 1.9.10版本使用的算法相同。

4.4.2 新版功能.