客戶端和服務(wù)器共享的 HTTP 實用程序代碼。
該模塊還定義了通過 ?tornado.web.RequestHandler.request
? 公開的 ?HTTPServerRequest
? 類。
為?Http-Header-Case
?保留所有鑰匙的字典。
通過一對新方法?add()
?和?get_list()
?,每個鍵支持多個值。常規(guī)字典接口為每個鍵返回一個值,多個值之間用逗號連接。
>>> 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
為給定鍵添加新值。
將給定表頭的所有值作為列表返回。
返回所有 (name, value) 對的可迭代對象。
如果一個表頭有多個值,將返回多個具有相同名稱的對。
使用單個標(biāo)題行更新字典。
>>> h = HTTPHeaders()
>>> h.parse_line("Content-Type: text/html")
>>> h.get('content-type')
'text/html'
從 HTTP 表頭文本返回字典。
>>> h = HTTPHeaders.parse("Content-Type: text/html\r\nContent-Length: 42\r\n")
>>> sorted(h.items())
[('Content-Length', '42'), ('Content-Type', 'text/html')]
單個 HTTP 請求。
除非另有說明,否則所有屬性都是 str 類型。
method
?:HTTP 請求方法,例如 “GET”或“POST”uri
?:請求的 uri。path
?:uri 的路徑部分query
?:uri的查詢部分version
?:請求中指定的 HTTP 版本,例如 “HTTP/1.1”headers
?:HTTPHeaders 請求表頭的類字典對象。 就像一個不區(qū)分大小寫的字典,帶有用于重復(fù)標(biāo)題的附加方法。body
?:請求正文(如果存在)作為字節(jié)字符串。remote_ip
?:客戶端的 IP 地址作為字符串。 如果設(shè)置了 HTTPServer.xheaders,將在 X-Real-Ip 或 X-Forwarded-For 標(biāo)頭中傳遞負載均衡器提供的真實 IP 地址。host
?:請求的主機名,通常取自 Host 表頭。arguments
?:GET/POST 參數(shù)在 arguments 屬性中可用,它將參數(shù)名稱映射到值列表(以支持單個名稱的多個值)。 名稱是 str 類型,而參數(shù)是字節(jié)字符串。 請注意,這與 RequestHandler.get_argument 不同,后者將參數(shù)值作為 unicode 字符串返回。query_arguments
?:與參數(shù)的格式相同,但僅包含從查詢字符串中提取的參數(shù)。body_arguments
?:與參數(shù)格式相同,但僅包含從請求正文中提取的參數(shù)。files
?:文件上傳可在 files 屬性中使用,它將文件名映射到 HTTPFile 列表。connectionHTTP
?:請求附加到單個 HTTP 連接,可以通過“connection”屬性訪問。 由于連接通常在 HTTP/1.1 中保持打開狀態(tài),因此可以在單個連接上按順序處理多個請求。cookies
?:http.cookies.Morsel 對象的字典。full_url() → str
?:[source]重構(gòu)此請求的完整 URL。request_time() → float
?:[source]返回此請求執(zhí)行所花費的時間。get_ssl_certificate(binary_form: bool = False) → Union[None, Dict[KT, VT], bytes]
?:返回客戶端的 SSL 證書(如果有)。要使用客戶端證書,必須設(shè)置 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 為真,則改為返回 DER 編碼形式的證書。
來自遠程源的格式錯誤的HTTP請求或響應(yīng)的異常類。
HTTP 輸出中的錯誤的異常類。
實現(xiàn)這個接口來處理來自 HTTPServer 的請求。
當(dāng)新請求開始時,服務(wù)器會調(diào)用此方法。
參數(shù):
?server_conn
?– 是一個不透明的對象,表示長生命(例如 tcp 級別)連接。
?request_conn
? – 是單個請求/響應(yīng)交換的 HTTPConnection 對象。
此方法應(yīng)返回 ?HTTPMessageDelegate
?。
當(dāng)連接關(guān)閉時調(diào)用此方法。
參數(shù): ?
server_conn
?– 是先前已傳遞給 start_request 的服務(wù)器連接。
實現(xiàn)此接口以處理 HTTP 請求或響應(yīng)。
在接收并解析 HTTP 表頭時調(diào)用。
參數(shù):
?start_line
?– RequestStartLine 或 ResponseStartLine 取決于這是客戶端消息還是服務(wù)器消息。
?headers
?——一個 HTTPHeaders 實例。
某些 HTTPConnection 方法只能在 ?headers_received
?期間調(diào)用。
可能返回一個 ?Future
?; 如果確實如此,則在完成之前不會讀取正文。
當(dāng)收到一大塊數(shù)據(jù)時調(diào)用。
可能會返回 ?Future
?進行流量控制。
在收到最后一塊數(shù)據(jù)后調(diào)用。
如果連接在未完成請求的情況下關(guān)閉,則調(diào)用。
如果 ?headers_received
?被調(diào)用,?finish
?或 ?on_connection_close
?將被調(diào)用,但不會同時調(diào)用。
應(yīng)用程序使用此接口來編寫它們的響應(yīng)。
編寫一個 HTTP 標(biāo)頭塊。
參數(shù):
?start_line
?– RequestStartLine 或 ResponseStartLine。
?headers
?——一個 HTTPHeaders 實例。
?chunk
?– 第一個(可選)數(shù)據(jù)塊。 這是一種優(yōu)化,以便可以在與標(biāo)題相同的調(diào)用中寫入小的響應(yīng)。
?start_line
的版本字段被忽略。
返回一個用于流控制的 future。
在 6.0 版更改: ?callback
?參數(shù)已刪除。
寫入一大塊正文數(shù)據(jù)。
返回一個用于流控制的 future。
在 6.0 版更改: ?callback
?參數(shù)已刪除。
表示最后的正文數(shù)據(jù)已被寫入。
無論 url 是否具有現(xiàn)有查詢參數(shù),都將 url 和參數(shù)連接起來。
?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'
表示通過表單上傳的文件。
為了向后兼容,它的實例屬性也可以作為字典鍵訪問。
filename
?body
?content_type
?解析表單請求正文。
支持 ?application/x-www-form-urlencoded
? 和 ?multipart/form-data
?。 ?content_type
?參數(shù)應(yīng)該是一個字符串,?body
?應(yīng)該是一個字節(jié)字符串。 ?arguments
?和 ?files
?參數(shù)是字典,將使用解析的內(nèi)容進行更新。
解析多部分/表單數(shù)據(jù)主體。
邊界和數(shù)據(jù)參數(shù)都是字節(jié)串。 ?arguments
?和 ?files
?參數(shù)中給出的字典將使用正文的內(nèi)容進行更新。
在 5.1 版更改: 現(xiàn)在可以識別 RFC 2231/5987 (?filename*=
?) 格式的非 ASCII 文件名。
以 HTTP 使用的格式格式化時間戳。
參數(shù)可以是 ?time.time
? 返回的數(shù)字時間戳、?time.gmtime
? 返回的時間元組或 ?datetime.datetime
? 對象。
>>> format_timestamp(1359312200)
'Sun, 27 Jan 2013 18:43:20 GMT'
RequestStartLine(method、path、version)
創(chuàng)建 RequestStartLine 的新實例(method、path、version)
?method
?:字段編號 0 的別名
?path
?:字段編號 1 的別名
?version
?:字段編號 2 的別名
返回 HTTP 1.x 請求行的(method、path、version)元組。
響應(yīng)是一個 ?collections.namedtuple
?。
>>> parse_request_start_line("GET /foo HTTP/1.1")
RequestStartLine(method='GET', path='/foo', version='HTTP/1.1')
ResponseStartLine(version、code、reason)
創(chuàng)建 ResponseStartLine(version、code、reason)的新實例
?code
?:字段編號 1 的別名
?reason
?:字段編號 2 的別名
?version
?:字段編號 0 的別名
返回 HTTP 1.x 響應(yīng)行的(version、code、reason)元組。
響應(yīng)是一個? collections.namedtuple
?。
>>> parse_response_start_line("HTTP/1.1 200 OK")
ResponseStartLine(version='HTTP/1.1', code=200, reason='OK')
以 HTTP 身份驗證使用的格式對用戶名/密碼對進行編碼。
返回值是格式為 ?username:password
? 的字節(jié)字符串。
從 ?netloc
?返回 ?(host, port)
? 元組。
如果不存在,則返回的?port
?將為 ?None
?。
生成器將 ?parse_qs
? 的結(jié)果轉(zhuǎn)換回名稱-值對。
將 ?Cookie
HTTP 表頭解析為名稱/值對的字典。
該函數(shù)試圖模仿瀏覽器 cookie 解析行為; 它特別不遵循任何與 cookie 相關(guān)的 RFC(因為瀏覽器也不遵循)。
使用的算法與 Django 版本 1.9.10 使用的算法相同。
更多建議: