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, сохраняются в виде строк.
См.также
- Модуль
http.cookiejar
Обработка HTTP-файлов cookie для веб-клиентов. Модули
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 отправляются в каждый
Morsel
методoutput()
. sep используется для объединения заголовков и по умолчанию представляет собой комбинацию'\r\n'
(CRLF).
Мелкие предметы¶
- class http.cookies.Morsel¶
Абстрагируйте пару ключ/значение, которая имеет некоторые атрибуты RFC 2109.
Фрагменты - это объекты, подобные словарю, набор ключей которых постоянен — допустимые атрибуты RFC 2109, которые являются:
Атрибут
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:')¶
Возвращает строковое представление фрагмента, подходящее для отправки в виде HTTP-заголовка. По умолчанию включены все атрибуты, если только не указано значение attrs, и в этом случае это должен быть список используемых атрибутов. заголовок по умолчанию равен
"Set-Cookie:"
.
- Morsel.js_output(attrs=None)¶
Возвращает встраиваемый фрагмент кода JavaScript, который при запуске в браузере, поддерживающем JavaScript, будет действовать так же, как если бы был отправлен HTTP-заголовок.
Значение для attrs такое же, как и в
output()
.
- Morsel.OutputString(attrs=None)¶
Возвращает строку, представляющую фрагмент, без каких-либо сопутствующих HTTP или JavaScript.
Значение для attrs такое же, как и в
output()
.
- Morsel.update(values)¶
Обновите значения в словаре Morsel на значения в словаре values. Выдает ошибку, если какой-либо из ключей в values dict не является допустимым атрибутом 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.11
Содержание
Дополнительно
Вы здесь:
-
Документация Django Python 3.11
- Стандартная библиотека Python
- Интернет-протоколы и их поддержка
http.cookies
— Управление состоянием HTTP
- Интернет-протоколы и их поддержка
- Стандартная библиотека Python