Содержание страницы
http.cookies – управление состоянием HTTP¶http.cookies – HTTP state management
Модуль http.cookies определяет классы для абстракции понятия cookies, механизма управления состоянием HTTP. Он поддерживает как простые строковые cookies, так и предоставляет абстракцию для использования любого сериализуемого типа данных в качестве значения cookie.
Ранее модуль строго применял правила разбора, описанные в спецификациях RFC 2109 и RFC 2068. Однако впоследствии было обнаружено, что MSIE 3.0x не следует правилам набора символов, изложенным в этих спецификациях. В результате используемые правила разбора стали менее строгими.
Примечание
При обнаружении недопустимого cookie возникает CookieError, поэтому, если данные cookie поступают из браузера, всегда следует готовиться к недопустимым данным и перехватывать CookieError при разборе.
- Исключение, возникающее из-за недействительности RFC 2109: неверные атрибуты, неверный заголовок Set-Cookie и т.д.
Этот класс представляет собой объект, подобный словарю, ключи которого – строки, а значения – экземпляры Morsel. Обратите внимание, что при установке ключа в значение, это значение сначала преобразуется в Morsel, содержащий ключ и значение.
Если указан параметр input, он передаётся методу load().
- Этот класс наследует от BaseCookie и переопределяет value_decode() и value_encode() как тождественную функцию и str() соответственно.
См. также
- Модуль http.cookiejar
- Обработка HTTP cookies для веб-клиентов. Модули http.cookiejar и http.cookies не зависят друг от друга.
- RFC 2109 – Механизм управления состоянием HTTP
- Это спецификация управления состоянием, реализованная этим модулем.
Объекты Cookie¶Cookie Objects
- Возвращает декодированное значение из строкового представления. Возвращаемое значение может быть любого типа. Этот метод ничего не делает в BaseCookie – он существует для того, чтобы его можно было переопределить.
Возвращает закодированное значение. val может быть любого типа, но возвращаемое значение должно быть строкой. Этот метод ничего не делает в 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. Если это словарь, то эквивалентно следующему:
for k, v in rawdata.items(): cookie[k] = v
Объекты Morsel¶Morsel Objects
Абстрагирует пару ключ/значение с атрибутами RFC 2109.
Объекты Morsel похожи на словари, и их набор ключей постоянен: это допустимые атрибуты RFC 2109, которые
- expires
- path
- comment
- domain
- max-age
- secure
- version
- httponly
Атрибут httponly указывает, что cookie передаётся только в HTTP-запросах и недоступен через JavaScript. Это предназначено для смягчения некоторых форм межсайтового скриптинга.
Ключи нечувствительны к регистру.
- Значение cookie.
- Закодированное значение cookie – именно его следует отправлять.
- Имя cookie.
- Устанавливает члены key, value и coded_value.
- Определяет, является ли K одним из ключей объекта Morsel.
- Возвращает строковое представление объекта Morsel, подходящее для отправки в качестве HTTP-заголовка. По умолчанию включаются все атрибуты, если не указан attrs; в этом случае он должен быть списком используемых атрибутов. header по умолчанию равен "Set-Cookie:".
Возвращает встраиваемый фрагмент JavaScript, который при выполнении в браузере, поддерживающем JavaScript, будет действовать так же, как если бы был отправлен HTTP-заголовок.
Значение attrs такое же, как в output().
Возвращает строку, представляющую Morsel, без какого-либо окружающего HTTP или JavaScript.
Значение attrs такое же, как в output().
Пример¶Example
Следующий пример демонстрирует использование модуля 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