http.cookies — Управление состоянием HTTP¶
Исходный код: Lib/http/cookies.py.
Модуль http.cookies определяет классы для абстрагирования концепции cookies, механизма управления состоянием HTTP. Он поддерживает как простые строковые cookies, так и предоставляет абстракцию для использования любого сериализуемого типа данных в качестве значения cookies.
Ранее модуль строго применял правила разбора, описанные в спецификациях 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, сохраняются как строки.
См.также
- Модуль
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 отправляются в каждый метод
Morseloutput(). sep используется для объединения заголовков вместе и по умолчанию представляет собой комбинацию'\r\n'(CRLF).
Объекты морса¶
-
class
http.cookies.Morsel¶ Абстрактная пара ключ/значение, которая имеет некоторые атрибуты RFC 2109.
Морсы - это словареподобные объекты, набор ключей которых постоянен — допустимые атрибуты RFC 2109, которые являются
expirespathcommentdomainmax-agesecureversionhttponlysamesite
Атрибут
httponlyуказывает, что cookie передается только в HTTP-запросах и недоступен через JavaScript. Это предназначено для смягчения некоторых форм межсайтового скриптинга.Атрибут
samesiteуказывает, что браузеру запрещено отправлять cookie вместе с межсайтовыми запросами. Это помогает смягчить CSRF-атаки. Допустимыми значениями для этого атрибута являются «Строгий» и «Небрежный».Ключи не чувствительны к регистру, и их значение по умолчанию
''.Изменено в версии 3.7: Атрибуты
key,valueиcoded_valueдоступны только для чтения. Для их установки используйтеset().Изменено в версии 3.8: Добавлена поддержка атрибута
samesite.
-
Morsel.value¶ Значение файла cookie.
-
Morsel.coded_value¶ Закодированное значение cookie - именно оно должно быть отправлено.
-
Morsel.key¶ Имя файла cookie.
-
Morsel.set(key, value, coded_value)¶ Установите атрибуты key, value и coded_value.
-
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 вместо диктанта.
-
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
Python 3.10
Contents
Extra
You are here:
-
Документация Django Python 3.10
- Стандартная библиотека Python
- Интернет-протоколы и поддержка
http.cookies— Управление состоянием HTTP
- Интернет-протоколы и поддержка
- Стандартная библиотека Python