tornado.httputil ---操作HTTP头和URL

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

该模块还定义了 HTTPServerRequest 通过以下方式暴露的类 tornado.web.RequestHandler.request .

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: str, value: str) → None[源代码]

为给定键添加新值。

get_list(name: str) → List[str][源代码]

以列表形式返回给定头的所有值。

get_all() → Iterable[Tuple[str, str]][源代码]

返回所有(名称、值)对的ITerable。

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

parse_line(line: str) → None[源代码]

用一个标题行更新字典。

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

从HTTP头文本返回字典。

>>> h = HTTPHeaders.parse("Content-Type: text/html\r\nContent-Length: 42\r\n")
>>> sorted(h.items())
[('Content-Length', '42'), ('Content-Type', 'text/html')]

在 5.1 版更改: 加薪 HTTPInputError 在格式错误的邮件头上,而不是在 KeyErrorValueError .

class tornado.httputil.HTTPServerRequest(method: Optional[str] = None, uri: Optional[str] = None, version: str = 'HTTP/1.0', headers: Optional[tornado.httputil.HTTPHeaders] = None, body: Optional[bytes] = None, host: Optional[str] = None, files: Optional[Dict[str, List[HTTPFile]]] = None, connection: Optional[HTTPConnection] = None, start_line: Optional[RequestStartLine] = None, server_connection: object = 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 设置后,将通过中的负载平衡器提供的实际IP地址 X-Real-IpX-Forwarded-For 标题。

在 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

文件上载在“文件”属性中可用,该属性将文件名映射到 HTTPFile .

connection

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

在 4.0 版更改: 移居 tornado.httpserver.HTTPRequest .

cookies

一本字典 http.cookies.Morsel 物体。

full_url() → str[源代码]

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

request_time() → float[源代码]

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

get_ssl_certificate(binary_form: bool = False) → Union[None, Dict, bytes][源代码]

返回客户端的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)

默认情况下,返回值为字典(如果不存在客户端证书,则返回值为无)。如果 binary_form 如果为真,则返回证书的DER编码形式。有关详细信息,请参阅标准库中的sslsocket.getpeercert()。http://docs.python.org/library/ssl.html sslsocket对象

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: object, request_conn: tornado.httputil.HTTPConnection) → tornado.httputil.HTTPMessageDelegate[源代码]

当新请求启动时,服务器将调用此方法。

参数
  • server_conn -- 是表示长期(如TCP级别)连接的不透明对象。

  • request_conn -- 是一个 HTTPConnection 单个请求/响应交换的对象。

此方法应返回 HTTPMessageDelegate .

on_close(server_conn: object) → None[源代码]

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

参数

server_conn -- 是以前传递到的服务器连接 start_request .

class tornado.httputil.HTTPMessageDelegate[源代码]

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

4.0 新版功能.

headers_received(start_line: Union[RequestStartLine, ResponseStartLine], headers: tornado.httputil.HTTPHeaders) → Optional[Awaitable[None]][源代码]

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

参数

一些 HTTPConnection 方法只能在 headers_received .

可能返回 Future ;如果这样做,则在完成前不会读取正文。

data_received(chunk: bytes) → Optional[Awaitable[None]][源代码]

当接收到数据块时调用。

可能返回 Future 用于流量控制。

finish() → None[源代码]

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

on_connection_close() → None[源代码]

如果连接在未完成请求的情况下关闭,则调用。

如果 headers_received 也可以调用 finishon_connection_close 将被调用,但不能同时调用。

class tornado.httputil.HTTPConnection[源代码]

应用程序使用此接口编写响应。

4.0 新版功能.

write_headers(start_line: Union[RequestStartLine, ResponseStartLine], headers: tornado.httputil.HTTPHeaders, chunk: Optional[bytes] = None) → Future[None][源代码]

编写一个HTTP头块。

参数
  • start_line -- 一 RequestStartLineResponseStartLine .

  • headers -- 一 HTTPHeaders 实例。

  • chunk -- 第一个(可选)数据块。这是一种优化,因此可以在与其头相同的调用中写入小响应。

这个 version 领域 start_line 被忽略。

返回流控制的未来。

在 6.0 版更改: 这个 callback 参数已删除。

write(chunk: bytes) → Future[None][源代码]

写入一块正文数据。

返回流控制的未来。

在 6.0 版更改: 这个 callback 参数已删除。

finish() → None[源代码]

指示已写入最后一个正文数据。

tornado.httputil.url_concat(url: str, args: Union[None, Dict[str, str], List[Tuple[str, str]], Tuple[Tuple[str, str], ...]]) → str[源代码]

连接URL和参数,不管URL是否有现有的查询参数。

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: str, body: bytes, arguments: Dict[str, List[bytes]], files: Dict[str, List[tornado.httputil.HTTPFile]], headers: Optional[tornado.httputil.HTTPHeaders] = None) → None[源代码]

解析表单请求正文。

支架 application/x-www-form-urlencodedmultipart/form-data . 这个 content_type 参数应为字符串,并且 body 应为字节字符串。这个 argumentsfiles 参数是将用解析内容更新的字典。

tornado.httputil.parse_multipart_form_data(boundary: bytes, data: bytes, arguments: Dict[str, List[bytes]], files: Dict[str, List[tornado.httputil.HTTPFile]]) → None[源代码]

解析A multipart/form-data 身体。

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

在 5.1 版更改: 现在识别RFC2231/5987中的非ASCII文件名 (filename*= )格式。

tornado.httputil.format_timestamp(ts: Union[int, float, tuple, datetime.datetime]) → str[源代码]

以HTTP使用的格式格式化时间戳。

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

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

RequestStartine(方法、路径、版本)

创建requestStartine的新实例(方法、路径、版本)

method

字段编号0的别名

path

字段编号1的别名

version

字段编号2的别名

tornado.httputil.parse_request_start_line(line: str) → tornado.httputil.RequestStartLine[源代码]

返回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: str) → tornado.httputil.ResponseStartLine[源代码]

返回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.encode_username_password(username: Union[str, bytes], password: Union[str, bytes]) → bytes[源代码]

以HTTP身份验证使用的格式对用户名/密码对进行编码。

返回值是表单中的字节字符串 username:password .

5.1 新版功能.

tornado.httputil.split_host_and_port(netloc: str) → Tuple[str, Optional[int]][源代码]

返回 (host, port) 元组从 netloc .

返回 portNone 如果不存在。

4.1 新版功能.

tornado.httputil.qs_to_qsl(qs: Dict[str, List[AnyStr]]) → Iterable[Tuple[str, AnyStr]][源代码]

生成器转换结果 parse_qs 返回到名称值对。

5.0 新版功能.

解析一 Cookie HTTP头到名称/值对的dict中。

此函数尝试模拟浏览器cookie解析行为;它特别不遵循任何与cookie相关的RFC(因为浏览器也不遵循)。

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

4.4.2 新版功能.