http.cookies — HTTP状態管理—Pythonドキュメント

提供:Dev Guides
< PythonPython/docs/3.8/library/http.cookies
移動先:案内検索

http.cookies —HTTP状態管理

ソースコード: :source: `Lib / http / cookies.py`



http.cookies モジュールは、HTTP状態管理メカニズムであるCookieの概念を抽象化するためのクラスを定義します。 単純な文字列のみのCookieをサポートし、シリアル化可能なデータ型をCookie値として持つための抽象化を提供します。

このモジュールは、以前は RFC 2109 および RFC 2068 仕様に記載されている解析ルールを厳密に適用していました。 その後、MSIE 3.0xがこれらの仕様で概説されている文字規則に準拠していないことが発見されました。また、現在の多くのブラウザーとサーバーでは、Cookieの処理に関して解析規則が緩和されています。 その結果、使用される解析ルールは少し厳しくなりません。

文字セット string.ascii_lettersstring.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状態管理メカニズム
これは、このモジュールによって実装される状態管理仕様です。


モーゼルオブジェクト

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.5での変更: __eq__()は、キーを考慮に入れるようになりました。

バージョン3.7で変更:属性キーおよび coded_value は読み取り専用です。 それらを設定するには、 set()を使用します。

バージョン3.8で変更: samesite属性のサポートが追加されました。

Morsel.value
Cookieの値。
Morsel.coded_value
クッキーのエンコードされた値—これは送信されるべきものです。
Morsel.key
クッキーの名前。
Morsel.set(key, value, coded_value)
keyvalue 、および coded_value 属性を設定します。
Morsel.isReservedKey(K)
KMorsel のキーセットのメンバーであるかどうか。
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