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
- 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
を、KeyError
とValueError
の組み合わせの代わりに、不正なヘッダーで発生します。
- 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。
- 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の新機能。
- connection¶
HTTPリクエストは単一のHTTP接続に関連付けられており、「connection」属性を通じてアクセスできます。接続はHTTP/1.1では通常開いたままになるため、単一の接続で複数のリクエストを順次処理できます。
バージョン4.0で変更:
tornado.httpserver.HTTPRequest
から移動されました。- 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で追加されました。
- 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
を返す必要があります。
- class tornado.httputil.HTTPMessageDelegate[source]¶
HTTPリクエストまたはレスポンスを処理するために、このインターフェースを実装します。
バージョン4.0で追加されました。
- headers_received(start_line: Union[RequestStartLine, ResponseStartLine], headers: HTTPHeaders) Optional[Awaitable[None]] [source]¶
HTTPヘッダーが受信され、解析されたときに呼び出されます。
- パラメータ
start_line – クライアントメッセージかサーバーメッセージかによって、
RequestStartLine
またはResponseStartLine
になります。headers –
HTTPHeaders
インスタンスです。
いくつかの
HTTPConnection
メソッドは、headers_received
中にのみ呼び出すことができます。Future
を返すことができます。返された場合、ボディは完了するまで読み取られません。
- 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_line –
RequestStartLine
またはResponseStartLine
。headers –
HTTPHeaders
インスタンスです。chunk – 最初の(オプションの)データチャンク。これは、小さなレスポンスをヘッダーと同じ呼び出しで書き込むための最適化です。
start_line
のversion
フィールドは無視されます。フロー制御のためのFutureを返します。
バージョン 6.0 で変更:
callback
引数が削除されました。
- 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-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[HTTPFile]]) None [source]¶
multipart/form-data
ボディを解析します。boundary
とdata
パラメータは両方ともバイト文字列です。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)
のタプルを返します。ポート番号が存在しない場合、返される
port
はNone
になります。バージョン 4.1 で追加されました。