tornado.httputil
---操作HTTP头和URL¶
客户端和服务器共享的HTTP实用程序代码。
该模块还定义了 HTTPServerRequest
通过以下方式暴露的类 tornado.web.RequestHandler.request
.
- class tornado.httputil.HTTPHeaders(__arg: Mapping[str, List[str]])[源代码]¶
- class tornado.httputil.HTTPHeaders(__arg: Mapping[str, str])
- class tornado.httputil.HTTPHeaders(*args: Tuple[str, str])
- class tornado.httputil.HTTPHeaders(**kwargs: str)
一本维护
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
- 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
在格式错误的邮件头上,而不是在KeyError
和ValueError
.
- 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[tornado.httputil.HTTPFile]]] = None, connection: Optional[tornado.httputil.HTTPConnection] = None, start_line: Optional[tornado.httputil.RequestStartLine] = None, server_connection: Optional[object] = None)[源代码]¶
单个HTTP请求。
所有属性都是类型
str
除非另有说明。- method¶
HTTP请求方法,例如“get”或“post”
- uri¶
请求的URI。
- version¶
请求中指定的HTTP版本,例如“http/1.1”
- headers¶
HTTPHeaders
请求头的类似字典的对象。类似于一个不区分大小写的字典,对重复的头使用其他方法。
- body¶
请求主体(如果存在)作为字节字符串。
- remote_ip¶
客户端的IP地址作为字符串。如果
HTTPServer.xheaders
设置后,将通过中的负载平衡器提供的实际IP地址X-Real-Ip
或X-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 新版功能.
- connection¶
HTTP请求附加到单个HTTP连接,可以通过“connection”属性访问该连接。由于连接通常在HTTP/1.1中保持打开状态,因此可以在单个连接上按顺序处理多个请求。
在 4.0 版更改: 移居
tornado.httpserver.HTTPRequest
.- property cookies: Dict[str, http.cookies.Morsel]¶
一本字典
http.cookies.Morsel
物体。
- 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对象
- 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
.
- class tornado.httputil.HTTPMessageDelegate[源代码]¶
实现此接口以处理HTTP请求或响应。
4.0 新版功能.
- headers_received(start_line: Union[tornado.httputil.RequestStartLine, tornado.httputil.ResponseStartLine], headers: tornado.httputil.HTTPHeaders) Optional[Awaitable[None]] [源代码]¶
在接收和分析HTTP头时调用。
- 参数
start_line -- 一
RequestStartLine
或ResponseStartLine
取决于这是客户机消息还是服务器消息。headers -- 一
HTTPHeaders
实例。
一些
HTTPConnection
方法只能在headers_received
.可能返回
Future
;如果这样做,则在完成前不会读取正文。
- 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 -- 一
RequestStartLine
或ResponseStartLine
.headers -- 一
HTTPHeaders
实例。chunk -- 第一个(可选)数据块。这是一种优化,因此可以在与其头相同的调用中写入小响应。
这个
version
领域start_line
被忽略。返回流控制的未来。
在 6.0 版更改: 这个
callback
参数已删除。
- 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-urlencoded
和multipart/form-data
. 这个content_type
参数应为字符串,并且body
应为字节字符串。这个arguments
和files
参数是将用解析内容更新的字典。
- 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
身体。这个
boundary
和data
参数都是字节字符串。参数和文件参数中给出的字典将随正文的内容更新。在 5.1 版更改: 现在识别RFC2231/5987中的非ASCII文件名 (
filename*=
)格式。
- tornado.httputil.format_timestamp(ts: Union[int, float, tuple, time.struct_time, 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(method, path, version)¶
RequestStartine(方法、路径、版本)
创建requestStartine的新实例(方法、路径、版本)
- property method¶
字段编号0的别名
- property path¶
字段编号1的别名
- property 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(version, code, reason)¶
ResponseStartline(版本、代码、原因)
创建responseStartline的新实例(版本、代码、原因)
- property code¶
字段编号1的别名
- property reason¶
字段编号2的别名
- property 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
.返回
port
将None
如果不存在。4.1 新版功能.