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и добавьте найденный там значения какMorsels. Если это словарь, он эквивалентен:for k, v in rawdata.items(): cookie[k] = v
Объекты Морселя¶
Абстрагируем пару ключ/значение, которая имеет некоторые RFC 2109 атрибуты.
Морсели - словареподобные объекты, набор ключей которых является постоянным — действительных RFC 2109 атрибуты, которые являются
expirespathcommentdomainmax-agesecureversionhttponlysamesite
атрибут
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
