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, хранятся в виде строк.
См. также
-
Modulehttp.cookiejar -
Обработка файлов cookie HTTP для веб-клиентов. Модули
http.cookiejarиhttp.cookiesне зависят друг от друга. - RFC 2109 — механизм управления состоянием HTTP
-
Это спецификация управления состоянием, реализованная данным модулем.
Объекты Morsel
-
class http.cookies.Morsel -
Представляет пару ключ/значение, имеющую некоторые атрибуты RFC 2109.
Объекты Morsel похожи на словари; их набор ключей является постоянным и состоит из допустимых атрибутов RFC 2109:
-
expires -
path -
comment -
domain - max-age
-
secure -
version -
httponly -
samesite
Атрибут
httponlyуказывает, что файл cookie передаётся только в запросах HTTP и недоступен через JavaScript. Это помогает защититься от некоторых видов межсайтового скриптинга.Атрибут
samesiteуказывает, что браузеру запрещено отправлять файл cookie вместе с межсайтовыми запросами. Это помогает смягчить атаки CSRF. Допустимые значения этого атрибута — «Strict» и «Lax».Ключи не чувствительны к регистру, а их значение по умолчанию —
''.Изменено в версии 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.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=\\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–2024 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.12/library/http.cookies.html