http.cookies
— Управление состоянием HTTP¶
Исходный код: Lib/http/cookies.py
Модуль http.cookies
определяет классы для реферирования понятия cookie,
механизма управления HTTP состояние. Это поддерживает и простой
строка-только cookies и обеспечивает абстракцию для того, чтобы иметь любой
сериализуемый тип данных как cookie значение.
Ранее модуль строго применял правила парсинг, описанные в спецификациях RFC 2109 и RFC 2068. С тех пор было обнаружено, что MSIE 3.0x не соблюдает правила символ, изложенные в этих specs, а также многие браузеры и серверы текущего дня смягчили правила парсинг, когда дело доходит до обработки cookie. В результате парсинг постановляет, что используемый немного менее строги.
Наборы символ, string.ascii_letters
, string.digits
и !#$%&'*+-.^_`|~:
обозначают набор допустимых символов, разрешенных этим модулем в имени cookie (как key
).
Изменено в версии 3.3: Допускается «»: «» в качестве допустимого имени cookie символ.
Примечание
При столкновении с недействительным cookies CookieError
поднят, поэтому если
ваши данные о cookie прибывают из браузера, вы должны всегда готовиться к
недействительным данным и ловить CookieError
на парсинг.
Ошибка исключения из-за недействительности RFC 2109: неправильная атрибуты, неправильный заголовок Set-Cookie и т.д.
Этот класс - подобный словарю объект, ключи которого - строки и чьи значения -
Morsel
сущности. Обратите внимание, что после устанавливания ключа к значение, значение сначала преобразован вMorsel
, содержащий ключ и значение.Если задано значение input, оно передается методу
load()
.
Этот класс является производным от
BaseCookie
и переопределяетvalue_decode()
иvalue_encode()
. SimpleCookie поддерживает строки как cookie значения. Устанавливая значение, SimpleCookie называет встроенныйstr()
, чтобы преобразовать значение в строка. Значения, полученные от HTTP, сохраняются как строки.
См.также
Модуль http.cookiejar
обработка файлов cookie HTTP для веб- clients. Модули
http.cookiejar
и http.cookies
не зависят друг от друга.
RFC 2109 - механизм управления состоянием HTTP это спецификация управления состояние, реализованная этим модулем.
Объекты cookie¶
Возвращает кортеж
(real_value, coded_value)
из представления строка.real_value
может быть любого типа. Этот метод не декодирует вBaseCookie
— он существует, поэтому его можно переопределить.
Возвращает кортеж
(real_value, coded_value)
. val может быть любого типа, ноcoded_value
всегда будет преобразован в строка. Этот метод не имеет кодировка вBaseCookie
—, поэтому его можно переопределить.В целом, должно быть так, что
value_encode()
иvalue_decode()
являются обратными на диапазон value_decode.
Возвращает представление строка, пригодное для отправки в виде заголовков HTTP. attrs и header посылаются каждому способу
output()
Morsel
. sep является используемый для объединения заголовков вместе и по умолчанию является комбинацией'\r\n'
(CRLF).
Возвращает встраиваемый фрагмент JavaScript, который при запуске в браузере, поддерживающем JavaScript, будет действовать так же, как при отправке заголовков HTTP.
Значение для attrs такое же, как и в
output()
.
Если rawdata является строка, проанализируйте его как
HTTP_COOKIE
и добавьте найденный там значения какMorsel
s. Если это словарь, он эквивалентен:for k, v in rawdata.items(): cookie[k] = v
Объекты Морселя¶
Абстрагируем пару ключ/значение, которая имеет некоторые RFC 2109 атрибуты.
Морсели - словареподобные объекты, набор ключей которых является постоянным — действительных RFC 2109 атрибуты, которые являются
expires
path
comment
domain
max-age
secure
version
httponly
samesite
атрибут
httponly
определяет, что cookie только передано в запросах HTTP и не доступно через JavaScript. Это предназначено для смягчения некоторых форм межсайтовых сценариев.Параметр атрибут
samesite
указывает, что обозревателю запрещено отправлять файлы cookie вместе с межузловыми запросами. Это помогает смягчить атаки CSRF. Действительные значения для этого атрибут «Строги» и «Слабы».Ключи без учета регистра и их дефолт, значение -
''
.Изменено в версии 3.7: Атрибуты
key
,value
иcoded_value
доступны только для чтения. Используйтеset()
для их настройки.Изменено в версии 3.8: Добавлена поддержка
samesite
атрибут.
Значение cookie.
Кодированный значение файла cookie — это то, что должно быть отправлено.
Имя cookie.
Задайте key, value и coded_value атрибуты.
Является ли K членом набора клавиш
Morsel
.
Возвращает представление строка кусочка, подходящего, чтобы быть посланным как заголовок HTTP. По умолчанию все атрибуты включены, если attrs не дан, в этом случае это должен быть список атрибуты, чтобы использовать. header по умолчанию является
"Set-Cookie:"
.
Возвращает встраиваемый фрагмент JavaScript, который при запуске в браузере, поддерживающем JavaScript, будет действовать так же, как при отправке заголовка HTTP.
Значение для attrs такое же, как и в
output()
.
Возвращает строка, представляющий морсель, без какого-либо окружающего HTTP или JavaScript.
Значение для attrs такое же, как и в
output()
.
Обновите значения в словаре Морселя с помощью значения в словаре values. Вызовите ошибку, если любой из ключей в values словарь не является допустимым RFC 2109 атрибут.
Изменено в версии 3.5: Для недопустимых ключей возникает ошибка.
Возвращает неглубокую копию объекта Морселя.
Изменено в версии 3.5: Возвращает объект Морселя вместо словаря.
Вызовите ошибку, если ключ не является допустимым RFC 2109 атрибут, в противном случае ведите себя так же, как
dict.setdefault()
.
Пример¶
В следующем примере показано, как использовать модуль http.cookies
.
>>> from http import cookies
>>> C = cookies.SimpleCookie()
>>> C["fig"] = "newton"
>>> C["sugar"] = "wafer"
>>> print(C) # генерировать заголовки HTTP
Set-Cookie: fig=newton
Set-Cookie: sugar=wafer
>>> print(C.output()) # то же самое
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") # загрузка из строки (заголовок HTTP)
>>> 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 # эквивалентно 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