http.cookies — Управление состоянием HTTP
Модуль http.cookies определяет классы для абстрагирования понятия куки, механизма управления состоянием HTTP. Он поддерживает как простые куки, состоящие только из строк, так и абстракцию для использования любых сериализуемых типов данных в качестве значения куки.
Модуль ранее строго применял правила разбора, описанные в спецификациях RFC 2109 и RFC 2068. Позднее было обнаружено, что MSIE 3.0x не следует правилам символов, указанным в этих спецификациях, а также многие современные браузеры и серверы ослабили правила разбора при обработке куки. В результате используемые правила разбора стали несколько менее строгими.
Набор символов, string.ascii_letters, string.digits и !#$%&'*+-.^_`|~: обозначают набор допустимых символов, разрешённых этим модулем в имени куки (как key).
Изменено в версии 3.3: Разрешен символ ‘:’ в качестве допустимого символа имени куки.
Примечание
При обнаружении недействительной куки, поднимается исключение CookieError, поэтому если ваши данные куки поступают из браузера, вы всегда должны быть готовы к недействительным данным и перехватывать исключение CookieError при разборе.
-
Исключение, возникающее из-за недействительности RFC 2109: неправильные атрибуты, неправильный заголовок Set-Cookie и т. п.
-
Этот класс является объектом, похожим на словарь, ключи которого — строки, а значения — экземпляры
Morsel. Обратите внимание, что при присваивании ключу значения, значение сначала преобразуется в экземплярMorsel, содержащий ключ и значение.Если указан параметр input, он передаётся методу
load().
-
Этот класс наследуется от
BaseCookieи переопределяет методыvalue_decode()иvalue_encode()на идентичность иstr()соответственно.
См. также
-
Modulehttp.cookiejar - Обработка HTTP-куки для веб-клиентов. Модули
http.cookiejarиhttp.cookiesне зависят друг от друга. - RFC 2109 — Механизм управления состоянием HTTP
- Это спецификация управления состоянием, реализованная в этом модуле.
1. Объекты куки
-
Возвращает декодированное значение из строкового представления. Возвращаемое значение может быть любого типа. Этот метод ничего не делает в
BaseCookie— он существует для переопределения.
-
Возвращает закодированное значение. val может быть любого типа, но возвращаемое значение должно быть строкой. Этот метод ничего не делает в
BaseCookie— он существует для переопределения.В общем случае
value_encode()иvalue_decode()являются обратными отображениями для value_decode.
-
Возвращает строковое представление, подходящее для отправки в качестве заголовков HTTP. attrs и header передаются в каждый метод
Morsel’soutput(). sep используется для объединения заголовков, и по умолчанию является'\r\n'(CRLF).
-
Возвращает фрагмент JavaScript-кода, который, если он будет выполнен в браузере, поддерживающем JavaScript, поведёт себя так же, как и отправка заголовков HTTP.
Значение attrs такое же, как и в
output().
-
Если rawdata является строкой, он парсится как
HTTP_COOKIEи добавляет найденные значения в качествеMorsels. Если это словарь, то эквивалентно:for k, v in rawdata.items(): cookie[k] = v
2. Объекты Morsel
-
Абстрагирует пару «ключ/значение», которая имеет некоторые атрибуты RFC 2109.
Morsel — объекты, похожие на словари, у которых набор ключей постоянен — допустимые атрибуты RFC 2109, которые:
expirespathcommentdomainmax-agesecureversionhttponly
Атрибут
httponlyуказывает, что кука передаётся только в запросах HTTP и не доступна через JavaScript. Это предназначено для смягчения некоторых форм XSS.Ключи регистронезависимы и их значение по умолчанию
''.
-
Значение куки.
Устарело начиная с версии 3.5: присваивание
value; используйтеset()вместо этого.
-
Закодированное значение куки — это то, что должно быть отправлено.
Устарело начиная с версии 3.5: присваивание
coded_value; используйтеset()вместо этого.
-
Имя куки.
Устарело начиная с версии 3.5: присваивание
key; используйтеset()вместо этого.
-
Устанавливает атрибуты key, value и coded_value.
Устарело начиная с версии 3.5: Недокументированный параметр LegalChars игнорируется и будет удалён в будущей версии.
-
Является ли K членом набора ключей
Morsel.
-
Возвращает строковое представление Morsel, подходящее для отправки в качестве заголовка HTTP. По умолчанию включаются все атрибуты, если не указан attrs, в котором случае должен быть передан список используемых атрибутов. header по умолчанию
"Set-Cookie:".
-
Возвращает фрагмент встраиваемого JavaScript, который, если его выполнить в браузере, поддерживающем JavaScript, поведёт себя так же, как если бы заголовок HTTP был отправлен.
Значение параметра attrs такое же, как в
output().
-
Возвращает строку, представляющую собой объект Morsel, без окружающего HTTP или JavaScript.
Значение параметра attrs такое же, как в
output().
-
Обновляет значения в словаре Morsel значениями из словаря values. Возбуждает ошибку, если какой-либо ключ в словаре values не является допустимым атрибутом RFC 2109.
Изменено в версии 3.5: возникает ошибка для недопустимых ключей.
-
Возвращает поверхностную копию объекта Morsel.
Изменено в версии 3.5: возвращает объект Morsel вместо словаря.
-
Возбуждает ошибку, если ключ не является допустимым атрибутом RFC 2109, в противном случае ведёт себя так же, как
dict.setdefault().
3. Пример
В следующем примере показано, как использовать модуль 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–2020 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.5/library/http.cookies.html