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 при разборе.
-
Исключение, возникающее из-за некорректности согласно RFC 2109: некорректные атрибуты, некорректный заголовок Set-Cookie и т. д.
-
Этот класс является объектом, похожим на словарь, ключи которого — строки, а значения — экземпляры
Morsel. Обратите внимание, что при присвоении значения ключу, это значение предварительно преобразуется в экземплярMorsel, содержащий ключ и значение.Если задан параметр input, он передаётся методу
load().
-
Этот класс наследуется от
BaseCookieи переопределяетvalue_decode()иvalue_encode(). SimpleCookie поддерживает строки в качестве значений cookie. При установке значения SimpleCookie использует встроенную функциюstr()для преобразования значения в строку. Значения, полученные из HTTP, сохраняются как строки.
См. также
-
Modulehttp.cookiejar -
Обработка файлов cookie HTTP для веб-клиентов. Модули
http.cookiejarиhttp.cookiesне зависят друг от друга. - RFC 2109 — Механизм управления состоянием HTTP
-
Это спецификация управления состоянием, реализованная в этом модуле.
Объекты Morsel
-
Абстрагирует пару ключ/значение, имеющую некоторые атрибуты RFC 2109.
Объекты Morsel похожи на словари, но набор ключей является постоянным — это допустимые атрибуты RFC 2109, которые
expirespathcommentdomainmax-agesecureversionhttponlysamesite
Атрибут
httponlyуказывает, что куки передаются только в HTTP-запросах и недоступны через JavaScript. Это призвано смягчить некоторые формы межсайтовых сценариев.Атрибут
samesiteуказывает, что браузеру запрещено отправлять куки вместе с межсайтовыми запросами. Это помогает смягчить атаки CSRF. Допустимые значения для этого атрибута — “Strict” и “Lax”.Ключи регистронезависимы, и их значение по умолчанию —
''.Изменено в версии 3.7: Атрибуты
key,valueиcoded_valueявляются только для чтения. Используйтеset()для их установки.Изменено в версии 3.8: Добавлена поддержка атрибута
samesite.
-
Значение куки.
-
Закодированное значение куки — именно это значение должно быть отправлено.
-
Имя куки.
-
Установить атрибуты ключ, значение и закодированное_значение.
-
Является ли K элементом набора ключей
Morsel.
-
Возвращает строковое представление объекта Morsel, подходящее для отправки в качестве HTTP-заголовка. По умолчанию включаются все атрибуты, если задан attrs, то он должен быть списком используемых атрибутов. Заголовок по умолчанию
"Set-Cookie:".
-
Возвращает встраиваемый фрагмент JavaScript, который, если он будет выполнен в браузере, поддерживающем JavaScript, будет действовать так же, как если бы был отправлен HTTP-заголовок.
Значение attrs такое же, как в
output().
-
Возвращает строку, представляющую объект Morsel, без каких-либо окружающих HTTP или JavaScript.
Значение attrs такое же, как в
output().
-
Обновить значения в словаре Morsel значениями в словаре значения. Вызовите ошибку, если любой из ключей в словаре значения не является допустимым атрибутом RFC 2109.
Изменено в версии 3.5: для недопустимых ключей возникает ошибка.
-
Возвращает поверхностную копию объекта Morsel.
Изменено в версии 3.5: возвращает объект Morsel вместо словаря.
-
Вызовите ошибку, если ключ не является допустимым атрибутом 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–2022 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.9/library/http.cookies.html