Spec-Zone.ru › Python 3.11

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

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

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

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

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

Изменено в версии 3.3: Разрешен символ ‘:’ в качестве допустимого символа имени куки.

Примечание

При обнаружении некорректной куки, генерируется CookieError, поэтому, если ваши данные куки поступают из браузера, вы всегда должны быть готовы к некорректным данным и перехватывать 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 поддерживает строки в качестве значений куки. При установке значения, SimpleCookie вызывает встроенную функцию str() для преобразования значения в строку. Значения, полученные из HTTP, сохраняются как строки.

См. также

Module http.cookiejar

Обработка HTTP куки для веб-клиентов. Модули 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’s методу output(). sep используется для объединения заголовков и по умолчанию является комбинацией '\r\n' (CRLF).

BaseCookie.js_output(attrs=None)

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

Значение attrs имеет такое же значение, как и в output().

BaseCookie.load(rawdata)

Если rawdata — строка, её нужно разобрать как HTTP_COOKIE и добавить найденные значения как Morsels. Если это словарь, это эквивалентно:

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

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

Атрибут samesite указывает, что браузеру не разрешено отправлять куки вместе с межсайтовыми запросами. Это помогает уменьшить атаки CSRF. Допустимые значения для этого атрибута — «Strict» и «Lax».

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

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

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

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

Morsel.value

Значение куки.

Morsel.coded_value

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

Morsel.key

Имя куки.

Morsel.set(key, value, coded_value)

Установить атрибуты ключ, значение и закодированное_значение.

Morsel.isReservedKey(K)

Является ли K членом набора ключей Morsel.

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

Возвращает строковое представление объекта Morsel, подходящее для отправки в качестве HTTP-заголовка. По умолчанию включаются все атрибуты, если задан attrs, то это должен быть список атрибутов для использования. заголовок по умолчанию "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 вместо словаря.

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

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

Spec-Zone.ru

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