tornado.httputil — HTTPヘッダーとURLの操作

クライアントとサーバーで共有されるHTTPユーティリティコード。

このモジュールは、HTTPServerRequestクラスも定義しており、tornado.web.RequestHandler.requestを介して公開されています。

class tornado.httputil.HTTPHeaders(__arg: Mapping[str, List[str]])[source]
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()を介して、キーごとに複数の値をサポートします。通常の辞書インターフェースは、キーごとに1つの値を返し、複数の値はコンマで結合されます。

>>> 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[source]

指定されたキーに新しい値を追加します。

get_list(name: str) List[str][source]

指定されたヘッダーのすべての値をリストとして返します。

get_all() Iterable[Tuple[str, str]][source]

すべての(name, value)ペアのイテラブルを返します。

ヘッダーに複数の値がある場合、同じ名前を持つ複数のペアが返されます。

parse_line(line: str) None[source]

単一のヘッダー行で辞書を更新します。

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

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[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: Optional[object] = None)[source]

単一の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-IpまたはX-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から移動されました。

property cookies: Dict[str, Morsel]

http.cookies.Morselオブジェクトの辞書。

full_url() str[source]

このリクエストの完全なURLを再構築します。

request_time() float[source]

このリクエストの実行にかかった時間を返します。

get_ssl_certificate(binary_form: bool = False) Union[None, Dict, bytes][source]

クライアントの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[source]

リモートソースからの不正なHTTPリクエストまたはレスポンスに対する例外クラスです。

バージョン4.0で追加されました。

exception tornado.httputil.HTTPOutputError[source]

HTTP出力エラーに対する例外クラスです。

バージョン4.0で追加されました。

class tornado.httputil.HTTPServerConnectionDelegate[source]

HTTPServerからのリクエストを処理するために、このインターフェースを実装します。

バージョン4.0で追加されました。

start_request(server_conn: object, request_conn: HTTPConnection) HTTPMessageDelegate[source]

このメソッドは、新しいリクエストが開始されたときにサーバーによって呼び出されます。

パラメータ
  • server_conn – 長期的な(例:TCPレベルの)接続を表す不透明なオブジェクトです。

  • request_conn – 単一のリクエスト/レスポンス交換に対するHTTPConnectionオブジェクトです。

このメソッドはHTTPMessageDelegateを返す必要があります。

on_close(server_conn: object) None[source]

このメソッドは、接続が閉じられたときに呼び出されます。

パラメータ

server_conn – 以前start_requestに渡されたサーバー接続です。

class tornado.httputil.HTTPMessageDelegate[source]

HTTPリクエストまたはレスポンスを処理するために、このインターフェースを実装します。

バージョン4.0で追加されました。

headers_received(start_line: Union[RequestStartLine, ResponseStartLine], headers: HTTPHeaders) Optional[Awaitable[None]][source]

HTTPヘッダーが受信され、解析されたときに呼び出されます。

パラメータ

いくつかのHTTPConnectionメソッドは、headers_received中にのみ呼び出すことができます。

Futureを返すことができます。返された場合、ボディは完了するまで読み取られません。

data_received(chunk: bytes) Optional[Awaitable[None]][source]

データのチャンクが受信されたときに呼び出されます。

フロー制御のために、Futureを返す場合があります。

finish() None[source]

最後のデータチャンクの受信後に呼び出されます。

on_connection_close() None[source]

リクエストが完了する前に接続が閉じられた場合に呼び出されます。

headers_received が呼び出された場合、finish または on_connection_close のいずれかが呼び出されますが、両方が呼び出されることはありません。

class tornado.httputil.HTTPConnection[source]

アプリケーションは、このインターフェースを使用してレスポンスを書き込みます。

バージョン4.0で追加されました。

write_headers(start_line: Union[RequestStartLine, ResponseStartLine], headers: HTTPHeaders, chunk: Optional[bytes] = None) Future[None][source]

HTTPヘッダーブロックを書き込みます。

パラメータ
  • start_lineRequestStartLine または ResponseStartLine

  • headersHTTPHeadersインスタンスです。

  • chunk – 最初の(オプションの)データチャンク。これは、小さなレスポンスをヘッダーと同じ呼び出しで書き込むための最適化です。

start_lineversion フィールドは無視されます。

フロー制御のためのFutureを返します。

バージョン 6.0 で変更: callback 引数が削除されました。

write(chunk: bytes) Future[None][source]

ボディデータのチャンクを書き込みます。

フロー制御のためのFutureを返します。

バージョン 6.0 で変更: callback 引数が削除されました。

finish() None[source]

最後のボディデータが書き込まれたことを示します。

tornado.httputil.url_concat(url: str, args: Union[None, Dict[str, str], List[Tuple[str, str]], Tuple[Tuple[str, str], ...]]) str[source]

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[source]

フォームを介してアップロードされたファイルを表現します。

下位互換性のために、インスタンス属性は辞書のキーとしてもアクセスできます。

  • filename

  • body

  • content_type

tornado.httputil.parse_body_arguments(content_type: str, body: bytes, arguments: Dict[str, List[bytes]], files: Dict[str, List[HTTPFile]], headers: Optional[HTTPHeaders] = None) None[source]

フォームリクエストボディを解析します。

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[HTTPFile]]) None[source]

multipart/form-data ボディを解析します。

boundarydataパラメータは両方ともバイト文字列です。argumentsとfilesパラメータで与えられた辞書は、ボディの内容で更新されます。

バージョン5.1で変更: RFC 2231/5987 (filename*=)形式の非ASCIIファイル名を認識するようになりました。

tornado.httputil.format_timestamp(ts: Union[int, float, tuple, struct_time, datetime]) str[source]

HTTPで使用される形式でタイムスタンプをフォーマットします。

引数は、time.timeによって返される数値のタイムスタンプ、time.gmtimeによって返されるタイムタプル、またはdatetime.datetimeオブジェクトです。ナイーブなdatetime.datetimeオブジェクトはUTCを表すと仮定され、認識可能なオブジェクトはフォーマットする前にUTCに変換されます。

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

RequestStartLine(method, path, version)

RequestStartLine(method, path, version)の新しいインスタンスを作成します。

method

フィールド番号0のエイリアス

path

フィールド番号1のエイリアス

version

フィールド番号2のエイリアス

tornado.httputil.parse_request_start_line(line: str) RequestStartLine[source]

HTTP 1.xリクエスト行の(method, path, version)タプルを返します。

レスポンスは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(version, code, reason)

ResponseStartLine(version, code, reason)の新しいインスタンスを作成します。

code

フィールド番号1のエイリアス

reason

フィールド番号2のエイリアス

version

フィールド番号0のエイリアス

tornado.httputil.parse_response_start_line(line: str) ResponseStartLine[source]

HTTP 1.xレスポンス行の(version, code, reason)タプルを返します。

レスポンスは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[source]

HTTP認証で使用される形式で、ユーザー名/パスワードのペアをエンコードします。

戻り値は、username:password形式のバイト文字列です。

バージョン5.1で追加。

tornado.httputil.split_host_and_port(netloc: str) Tuple[str, Optional[int]][source]

netloc から (host, port) のタプルを返します。

ポート番号が存在しない場合、返される portNone になります。

バージョン 4.1 で追加されました。

tornado.httputil.qs_to_qsl(qs: Dict[str, List]) Iterable[Tuple[str, AnyStr]][source]

parse_qs の結果を名前と値のペアに変換するジェネレータです。

バージョン 5.0 で追加されました。

Cookie HTTP ヘッダーを名前と値のペアの辞書にパースします。

この関数は、ブラウザの Cookie パース動作を模倣しようとします。具体的には、Cookie 関連の RFC のいずれにも従いません(ブラウザもそうではないためです)。

使用されるアルゴリズムは、Django バージョン 1.9.10 で使用されているものと同じです。

バージョン 4.4.2 で追加されました。