Документация Python неофициальный перевод

http.cookies.md

276 строк · 11.6 КБ · обычная страница · сырой текст · скачать

1> **Источник:** https://python-all.ru/3.1/library/http.cookies.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 20.21. `http.cookies` – Управление состоянием HTTP89Модуль `http.cookies` определяет классы для абстракции понятия cookies, механизма управления состоянием HTTP. Он поддерживает как простые строковые cookies, так и предоставляет абстракцию для использования любого сериализуемого типа данных в качестве значения cookie.1011Ранее модуль строго применял правила разбора, описанные в спецификациях [**RFC 2109**](https://python-all.ru/3.1/library/http.cookies.html) и [**RFC 2068**](https://python-all.ru/3.1/library/http.cookies.html). Однако впоследствии было обнаружено, что MSIE 3.0x не следует правилам набора символов, изложенным в этих спецификациях. В результате используемые правила разбора стали менее строгими.1213> **Примечание**14>15> При обнаружении недопустимого cookie возникает [`CookieError`](https://python-all.ru/3.1/library/http.cookies.html#http.cookies.CookieError), поэтому, если данные cookie поступают из браузера, всегда следует готовиться к недопустимым данным и перехватывать [`CookieError`](https://python-all.ru/3.1/library/http.cookies.html#http.cookies.CookieError) при разборе.1617#### `exception http.cookies.CookieError`1819Исключение, возникающее из-за недействительности2021[**RFC 2109**](https://python-all.ru/3.1/library/http.cookies.html)2223: неверные атрибуты, неверный заголовок2425*Set-Cookie*2627и т.д.2829#### `class http.cookies.BaseCookie([input])`3031Этот класс представляет собой объект, подобный словарю, ключи которого – строки, а значения – экземпляры [`Morsel`](https://python-all.ru/3.1/library/http.cookies.html#http.cookies.Morsel). Обратите внимание, что при установке ключа в значение, это значение сначала преобразуется в [`Morsel`](https://python-all.ru/3.1/library/http.cookies.html#http.cookies.Morsel), содержащий ключ и значение.3233Если указан параметр *input*, он передаётся методу [`load()`](https://python-all.ru/3.1/library/http.cookies.html#http.cookies.BaseCookie.load).3435#### `class http.cookies.SimpleCookie([input])`3637Этот класс наследует от3839[`BaseCookie`](https://python-all.ru/3.1/library/http.cookies.html#http.cookies.BaseCookie)4041и переопределяет4243`value_decode()`4445и4647`value_encode()`4849как тождественную функцию и5051[`str()`](https://python-all.ru/3.1/library/functions.html#str)5253соответственно.5455> **См. также**56>57> **Модуль [`http.cookiejar`](https://python-all.ru/3.1/library/http.cookiejar.html#module-http.cookiejar)**58>59> Обработка HTTP cookies для веб-60>61> *клиентов*62>63> . Модули64>65> [`http.cookiejar`](https://python-all.ru/3.1/library/http.cookiejar.html#module-http.cookiejar)66>67> и68>69> `http.cookies`70>71> не зависят друг от друга.72>73> **[**RFC 2109**](https://python-all.ru/3.1/library/http.cookies.html) – Механизм управления состоянием HTTP**74>75> Это спецификация управления состоянием, реализованная этим модулем.7677## 20.21.1. Объекты Cookie7879#### `BaseCookie.value_decode(val)`8081Возвращает декодированное значение из строкового представления. Возвращаемое значение может быть любого типа. Этот метод ничего не делает в8283[`BaseCookie`](https://python-all.ru/3.1/library/http.cookies.html#http.cookies.BaseCookie)8485– он существует для того, чтобы его можно было переопределить.8687#### `BaseCookie.value_encode(val)`8889Возвращает закодированное значение. *val* может быть любого типа, но возвращаемое значение должно быть строкой. Этот метод ничего не делает в [`BaseCookie`](https://python-all.ru/3.1/library/http.cookies.html#http.cookies.BaseCookie) – он существует, чтобы его можно было переопределить9091В общем случае предполагается, что [`value_encode()`](https://python-all.ru/3.1/library/http.cookies.html#http.cookies.BaseCookie.value_encode) и [`value_decode()`](https://python-all.ru/3.1/library/http.cookies.html#http.cookies.BaseCookie.value_decode) являются обратными функциями на области значений *value\_decode*.9293#### `BaseCookie.output(attrs=None, header='Set-Cookie:', sep='\r\n')`9495Возвращает строковое представление, пригодное для отправки в качестве HTTP-заголовков.9697*attrs*9899и100101*header*102103передаются методу104105[`output()`](https://python-all.ru/3.1/library/http.cookies.html#http.cookies.BaseCookie.output)106107каждого объекта108109[`Morsel`](https://python-all.ru/3.1/library/http.cookies.html#http.cookies.Morsel)110111.112113*sep*114115используется для объединения заголовков; по умолчанию это комбинация116117`'\r\n'`118119(CRLF).120121#### `BaseCookie.js_output(attrs=None)`122123Возвращает встраиваемый фрагмент JavaScript, который при выполнении в браузере, поддерживающем JavaScript, будет действовать так же, как если бы были отправлены HTTP-заголовки.124125Значение *attrs* такое же, как в [`output()`](https://python-all.ru/3.1/library/http.cookies.html#http.cookies.BaseCookie.output).126127#### `BaseCookie.load(rawdata)`128129Если *rawdata* является строкой, она разбирается как `HTTP_COOKIE`, а найденные значения добавляются как объекты [`Morsel`](https://python-all.ru/3.1/library/http.cookies.html#http.cookies.Morsel). Если это словарь, то эквивалентно следующему:130131```python132for k, v in rawdata.items():133    cookie[k] = v134```135136## 20.21.2. Объекты Morsel137138#### `class http.cookies.Morsel`139140Абстрагирует пару ключ/значение с атрибутами [**RFC 2109**](https://python-all.ru/3.1/library/http.cookies.html).141142Объекты Morsel похожи на словари, и их набор ключей постоянен: это допустимые атрибуты [**RFC 2109**](https://python-all.ru/3.1/library/http.cookies.html), которые143144- `expires`145- `path`146- `comment`147- `domain`148- `max-age`149- `secure`150- `version`151- `httponly`152153Атрибут `httponly` указывает, что cookie передаётся только в HTTP-запросах и недоступна через JavaScript. Это предназначено для смягчения некоторых форм межсайтового скриптинга.154155Ключи нечувствительны к регистру.156157#### `Morsel.value`158159Значение cookie.160161#### `Morsel.coded_value`162163Закодированное значение cookie – именно его следует отправлять.164165#### `Morsel.key`166167Имя cookie.168169#### `Morsel.set(key, value, coded_value)`170171Устанавливает члены172173*key*174175,176177*value*178179и180181*coded\_value*182183.184185#### `Morsel.isReservedKey(K)`186187Определяет, является ли188189*K*190191одним из ключей объекта192193[`Morsel`](https://python-all.ru/3.1/library/http.cookies.html#http.cookies.Morsel)194195.196197#### `Morsel.output(attrs=None, header='Set-Cookie:')`198199Возвращает строковое представление объекта Morsel, подходящее для отправки в качестве HTTP-заголовка. По умолчанию включаются все атрибуты, если не указан200201*attrs*202203; в этом случае он должен быть списком используемых атрибутов.204205*header*206207по умолчанию равен208209`"Set-Cookie:"`210211.212213#### `Morsel.js_output(attrs=None)`214215Возвращает встраиваемый фрагмент JavaScript, который при выполнении в браузере, поддерживающем JavaScript, будет действовать так же, как если бы был отправлен HTTP-заголовок.216217Значение *attrs* такое же, как в [`output()`](https://python-all.ru/3.1/library/http.cookies.html#http.cookies.Morsel.output).218219#### `Morsel.OutputString(attrs=None)`220221Возвращает строку, представляющую Morsel, без какого-либо окружающего HTTP или JavaScript.222223Значение *attrs* такое же, как в [`output()`](https://python-all.ru/3.1/library/http.cookies.html#http.cookies.Morsel.output).224225## 20.21.3. Пример226227Следующий пример демонстрирует использование модуля `http.cookies`.228229```python230>>> from http import cookies231>>> C = cookies.SimpleCookie()232>>> C["fig"] = "newton"233>>> C["sugar"] = "wafer"234>>> print(C) # сгенерировать HTTP-заголовки235Set-Cookie: fig=newton236Set-Cookie: sugar=wafer237>>> print(C.output()) # то же самое238Set-Cookie: fig=newton239Set-Cookie: sugar=wafer240>>> C = cookies.SimpleCookie()241>>> C["rocky"] = "road"242>>> C["rocky"]["path"] = "/cookie"243>>> print(C.output(header="Cookie:"))244Cookie: rocky=road; Path=/cookie245>>> print(C.output(attrs=[], header="Cookie:"))246Cookie: rocky=road247>>> C = cookies.SimpleCookie()248>>> C.load("chips=ahoy; vienna=finger") # загрузить из строки (HTTP-заголовок)249>>> print(C)250Set-Cookie: chips=ahoy251Set-Cookie: vienna=finger252>>> C = cookies.SimpleCookie()253>>> C.load('keebler="E=everybody; L=\\"Loves\\"; fudge=\\012;";')254>>> print(C)255Set-Cookie: keebler="E=everybody; L=\"Loves\"; fudge=\012;"256>>> C = cookies.SimpleCookie()257>>> C["oreo"] = "doublestuff"258>>> C["oreo"]["path"] = "/"259>>> print(C)260Set-Cookie: oreo=doublestuff; Path=/261>>> C = cookies.SimpleCookie()262>>> C["twix"] = "none for you"263>>> C["twix"].value264'none for you'265>>> C = cookies.SimpleCookie()266>>> C["number"] = 7 # эквивалентно C["number"] = str(7)267>>> C["string"] = "seven"268>>> C["number"].value269'7'270>>> C["string"].value271'seven'272>>> print(C)273Set-Cookie: number=7274Set-Cookie: string=seven275```276