Spec-Zone.ru › Python 3.14

http.cookies — управление состоянием HTTP

Исходный код: Lib/http/cookies.py

Модуль http.cookies определяет классы для абстрагирования понятия файлов cookie — механизма управления состоянием HTTP. Он поддерживает как простые файлы cookie, содержащие только строки, так и предоставляет абстракцию, позволяющую использовать в качестве значения cookie любой сериализуемый тип данных.

Ранее модуль строго применял правила разбора, описанные в спецификациях RFC 2109 и RFC 2068. Позднее выяснилось, что MSIE 3.0x не следовал правилам использования символов, изложенным в этих спецификациях; многие современные браузеры и серверы также смягчили правила разбора при обработке файлов cookie. В результате теперь в модуле используются несколько менее строгие правила разбора.

Набор символов, string.ascii_letters, string.digits и !#$%&'*+-.^_`|~: обозначают набор допустимых в этом модуле символов для имени cookie (в виде key).

Изменено в версии 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, сохраняются в виде строк.

См. также

Module http.cookiejar

Обработка файлов cookie HTTP для веб-клиентов. Модули http.cookiejar и http.cookies не зависят друг от друга.

RFC 2109 — механизм управления состоянием HTTP

Эта спецификация управления состоянием реализована в данном модуле.

Объекты Cookie

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 передаются методу output() каждого объекта Morsel. Параметр 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

Объекты Morsel

class http.cookies.Morsel

Представляет пару ключ/значение с некоторыми атрибутами RFC 2109.

Объекты Morsel подобны словарям; набор их ключей является постоянным и включает допустимые атрибуты RFC 2109:

expires
path
comment
domain
max-age
secure
version
httponly
samesite
partitioned

Атрибут httponly указывает, что cookie передается только в HTTP-запросах и недоступен через JavaScript. Это предназначено для защиты от некоторых видов межсайтового выполнения сценариев.

Атрибут samesite определяет, когда браузер отправляет cookie вместе с межсайтовыми запросами. Это помогает снизить риск атак CSRF. Допустимые значения: «Strict» (отправляется только с запросами с того же сайта), «Lax» (отправляется с запросами с того же сайта и при переходах верхнего уровня) и «None» (отправляется с запросами как с того же, так и с других сайтов). При использовании значения «None» необходимо также установить атрибут «secure», как того требуют современные браузеры.

Атрибут partitioned сообщает пользовательским агентам, что эти межсайтовые файлы cookie должны быть доступны только в том же контексте верхнего уровня, в котором cookie был впервые установлен. Чтобы пользовательский агент принял этот атрибут, необходимо также установить Secure.

Кроме того, при установке разделенных файлов cookie рекомендуется использовать префикс __Host, чтобы привязать их к имени хоста, а не к регистрируемому домену. Полное описание и примеры приведены в CHIPS (файлы cookie с независимым разделенным состоянием).

Ключи нечувствительны к регистру, их значение по умолчанию — ''.

Изменено в версии 3.5: Теперь __eq__() учитывает key и value.

Изменено в версии 3.7: Атрибуты key, value и coded_value доступны только для чтения. Для их установки используйте set().

Изменено в версии 3.8: Добавлена поддержка атрибута samesite.

Изменено в версии 3.14: Добавлена поддержка атрибута partitioned.

Morsel.value

Значение cookie.

Morsel.coded_value

Закодированное значение cookie — именно оно должно отправляться.

Morsel.key

Имя cookie.

Morsel.set(key, value, coded_value)

Устанавливает атрибуты key, value и coded_value.

Morsel.isReservedKey(K)

Проверяет, принадлежит ли K к набору ключей объекта Morsel.

Morsel.output(attrs=None, header='Set-Cookie:')

Возвращает строковое представление объекта Morsel, пригодное для отправки в качестве заголовка HTTP. По умолчанию включаются все атрибуты, если не задан параметр attrs; в этом случае он должен представлять собой список используемых атрибутов. Значение header по умолчанию — "Set-Cookie:".

Morsel.js_output(attrs=None)

Возвращает встраиваемый фрагмент JavaScript, который при запуске в браузере с поддержкой JavaScript действует так же, как если бы был отправлен заголовок HTTP.

Параметр attrs имеет тот же смысл, что и в output().

Morsel.OutputString(attrs=None)

Возвращает строковое представление объекта Morsel без окружающего текста HTTP или JavaScript.

Параметр attrs имеет тот же смысл, что и в output().

Morsel.update(values)

Обновляет значения в словаре Morsel значениями из словаря values. Если какой-либо ключ в словаре values не является допустимым атрибутом RFC 2109, возникает ошибка.

Изменено в версии 3.5: При недопустимых ключах возникает ошибка.

Morsel.copy(value)

Возвращает поверхностную копию объекта Morsel.

Изменено в версии 3.5: возвращается объект Morsel, а не dict.

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=;";')
>>> print(C)
Set-Cookie: keebler="E=everybody; L=\"Loves\"; fudge=;"
>>> 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

© 2001 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.14/library/http.cookies.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API