http.cookies —HTTP状態管理
ソースコード: :source: `Lib / http / cookies.py`
http.cookies モジュールは、HTTP状態管理メカニズムであるCookieの概念を抽象化するためのクラスを定義します。 単純な文字列のみのCookieをサポートし、シリアル化可能なデータ型をCookie値として持つための抽象化を提供します。
このモジュールは、以前は RFC 2109 および RFC 2068 仕様に記載されている解析ルールを厳密に適用していました。 その後、MSIE 3.0xがこれらの仕様で概説されている文字規則に準拠していないことが発見されました。また、現在の多くのブラウザーとサーバーでは、Cookieの処理に関して解析規則が緩和されています。 その結果、使用される解析ルールは少し厳しくなりません。
文字セット string.ascii_letters 、 string.digits 、および!#$%&'*+-.^_`|~:
は、このモジュールでCookie名に許可されている有効な文字のセットを示します( key [ X171X])。
バージョン3.3で変更:有効なCookie名文字として「:」を許可。
ノート
無効なCookieが発生すると、 CookieError が発生するため、Cookieデータがブラウザからのものである場合は、常に無効なデータを準備し、解析時に CookieError をキャッチする必要があります。
- exception http.cookies.CookieError
- RFC 2109 の無効性が原因で例外が失敗しました:属性が正しくない、 Set-Cookie ヘッダーが正しくないなど。
- class http.cookies.BaseCookie([input])
このクラスは、キーが文字列で値が Morsel インスタンスである辞書のようなオブジェクトです。 キーを値に設定すると、値は最初にキーと値を含む Morsel に変換されることに注意してください。
input が指定されると、 load()メソッドに渡されます。
- class http.cookies.SimpleCookie([input])
- このクラスは BaseCookie から派生し、
value_decode()
およびvalue_encode()
をオーバーライドします。 SimpleCookieは、Cookie値として文字列をサポートします。 SimpleCookieは、値を設定するときに、組み込みの str()を呼び出して、値を文字列に変換します。 HTTPから受け取った値は、文字列として保持されます。
も参照してください
- モジュール http.cookiejar
- Web クライアントのHTTPCookie処理。 http.cookiejar モジュールと http.cookies モジュールは相互に依存していません。
- RFC 2109 -HTTP状態管理メカニズム
- これは、このモジュールによって実装される状態管理仕様です。
クッキーオブジェクト
- BaseCookie.value_decode(val)
- 文字列表現からタプル
(real_value, coded_value)
を返します。real_value
は任意のタイプにすることができます。 このメソッドは、 BaseCookie ではデコードを行いません—存在するため、オーバーライドできます。
- BaseCookie.value_encode(val)
タプル
(real_value, coded_value)
を返します。 val は任意の型にすることができますが、coded_value
は常に文字列に変換されます。 このメソッドは、 BaseCookie ではエンコードされません—存在するため、オーバーライドできます。一般に、 value_encode()と value_decode()は、 value_decode の範囲の逆である場合があります。
- BaseCookie.output(attrs=None, header='Set-Cookie:', sep='\\r\\n')
- HTTPヘッダーとして送信するのに適した文字列表現を返します。 attrs および header は、各 Morsel の output()メソッドに送信されます。 sep はヘッダーを結合するために使用され、デフォルトでは
'\r\n'
(CRLF)の組み合わせです。
- BaseCookie.js_output(attrs=None)
埋め込み可能なJavaScriptスニペットを返します。これは、JavaScriptをサポートするブラウザーで実行すると、HTTPヘッダーが送信された場合と同じように機能します。
attrs の意味は、 output()と同じです。
- BaseCookie.load(rawdata)
rawdata が文字列の場合は、
HTTP_COOKIE
として解析し、そこで見つかった値を Morsel として追加します。 辞書の場合、次と同等です。for k, v in rawdata.items(): cookie[k] = v
モーゼルオブジェクト
- class http.cookies.Morsel
いくつかの RFC 2109 属性を持つキー/値ペアを抽象化します。
モーゼルは辞書のようなオブジェクトであり、そのキーのセットは一定です—有効な RFC 2109 属性は次のとおりです。
expires
path
comment
domain
max-age
secure
version
httponly
samesite
属性
httponly
は、CookieがHTTPリクエストでのみ転送され、JavaScriptを介してアクセスできないことを指定します。 これは、クロスサイトスクリプティングのいくつかの形式を軽減することを目的としています。属性
samesite
は、ブラウザーがクロスサイトリクエストと一緒にCookieを送信することを許可されないことを指定します。 これは、CSRF攻撃を軽減するのに役立ちます。 この属性の有効な値は「Strict」と「Lax」です。キーは大文字と小文字を区別せず、デフォルト値は
です。
バージョン3.7で変更:属性キー、値および coded_value は読み取り専用です。 それらを設定するには、 set()を使用します。
バージョン3.8で変更:
samesite
属性のサポートが追加されました。
- Morsel.value
- Cookieの値。
- Morsel.coded_value
- クッキーのエンコードされた値—これは送信されるべきものです。
- Morsel.key
- クッキーの名前。
- Morsel.set(key, value, coded_value)
- key 、 value 、および coded_value 属性を設定します。
- Morsel.isReservedKey(K)
- K が Morsel のキーセットのメンバーであるかどうか。
- Morsel.output(attrs=None, header='Set-Cookie:')
- HTTPヘッダーとして送信するのに適したMorselの文字列表現を返します。 デフォルトでは、 attrs が指定されていない限り、すべての属性が含まれています。指定されている場合は、使用する属性のリストである必要があります。 ヘッダーはデフォルトで
"Set-Cookie:"
です。
- Morsel.js_output(attrs=None)
埋め込み可能なJavaScriptスニペットを返します。これは、JavaScriptをサポートするブラウザーで実行すると、HTTPヘッダーが送信された場合と同じように機能します。
attrs の意味は、 output()と同じです。
- Morsel.OutputString(attrs=None)
周囲のHTTPまたはJavaScriptを使用せずに、Morselを表す文字列を返します。
attrs の意味は、 output()と同じです。
- Morsel.update(values)
Morselディクショナリの値をディクショナリ values の値で更新します。 values dictのいずれかのキーが有効な RFC 2109 属性でない場合は、エラーを発生させます。
バージョン3.5で変更:無効なキーに対してエラーが発生します。
- Morsel.copy(value)
Morselオブジェクトの浅いコピーを返します。
バージョン3.5で変更: dictの代わりにMorselオブジェクトを返します。
- Morsel.setdefault(key, value=None)
- キーが有効な RFC 2109 属性でない場合はエラーを発生させ、それ以外の場合は dict.setdefault()と同じように動作します。
例
次の例は、 http.cookies モジュールの使用方法を示しています。
>>> from http import cookies
>>> C = cookies.SimpleCookie()
>>> C["fig"] = "newton"
>>> C["sugar"] = "wafer"
>>> print(C) # generate HTTP headers
Set-Cookie: fig=newton
Set-Cookie: sugar=wafer
>>> print(C.output()) # same thing
Set-Cookie: fig=newton
Set-Cookie: sugar=wafer
>>> C = cookies.SimpleCookie()
>>> C["rocky"] = "road"
>>> C["rocky"]["path"] = "/cookie"
>>> print(C.output(header="Cookie:"))
Cookie: rocky=road; Path=/cookie
>>> print(C.output(attrs=[], header="Cookie:"))
Cookie: rocky=road
>>> C = cookies.SimpleCookie()
>>> C.load("chips=ahoy; vienna=finger") # load from a string (HTTP header)
>>> print(C)
Set-Cookie: chips=ahoy
Set-Cookie: vienna=finger
>>> C = cookies.SimpleCookie()
>>> C.load('keebler="E=everybody; L=\\"Loves\\"; fudge=\\012;";')
>>> print(C)
Set-Cookie: keebler="E=everybody; L=\"Loves\"; fudge=\012;"
>>> C = cookies.SimpleCookie()
>>> C["oreo"] = "doublestuff"
>>> C["oreo"]["path"] = "/"
>>> print(C)
Set-Cookie: oreo=doublestuff; Path=/
>>> C = cookies.SimpleCookie()
>>> C["twix"] = "none for you"
>>> C["twix"].value
'none for you'
>>> C = cookies.SimpleCookie()
>>> C["number"] = 7 # equivalent to C["number"] = str(7)
>>> C["string"] = "seven"
>>> C["number"].value
'7'
>>> C["string"].value
'seven'
>>> print(C)
Set-Cookie: number=7
Set-Cookie: string=seven