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

http.cookies.md

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

1> **Источник:** https://python-all.ru/3.2/library/http.cookies.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 20.21. [`http.cookies`](https://python-all.ru/3.2/library/http.cookies.html#module-http.cookies) – управление состоянием HTTP89**Исходный код:** [Lib/http/cookies.py](https://python-all.ru/src/3.2/Lib/http/cookies.py)1011---1213Модуль [`http.cookies`](https://python-all.ru/3.2/library/http.cookies.html#module-http.cookies) определяет классы для абстракции понятия cookie – механизма управления состоянием HTTP. Он поддерживает как простые строковые cookie, так и предоставляет абстракцию для использования любого сериализуемого типа данных в качестве значения cookie.1415Раньше модуль строго применял правила разбора, описанные в спецификациях [**RFC 2109**](https://python-all.ru/3.2/library/http.cookies.html) и [**RFC 2068**](https://python-all.ru/3.2/library/http.cookies.html). Но с тех пор выяснилось, что MSIE 3.0x не соблюдает описанные в этих спецификациях правила набора символов, и к тому же многие современные браузеры и серверы при работе с Cookie придерживаются менее строгих правил разбора. В результате используемые правила разбора стали несколько менее строгими.1617Набор символов [`string.ascii_letters`](https://python-all.ru/3.2/library/string.html#string.ascii_letters), [`string.digits`](https://python-all.ru/3.2/library/string.html#string.digits) и `` !#$%&'*+-.^_`|~ `` обозначают множество допустимых символов, разрешенных этим модулем в имени Cookie (как [`key`](https://python-all.ru/3.2/library/http.cookies.html#http.cookies.Morsel.key)).1819> **Примечание**20>21> При обнаружении недопустимого cookie возникает [`CookieError`](https://python-all.ru/3.2/library/http.cookies.html#http.cookies.CookieError), поэтому, если данные cookie поступают из браузера, всегда следует готовиться к недопустимым данным и перехватывать [`CookieError`](https://python-all.ru/3.2/library/http.cookies.html#http.cookies.CookieError) при разборе.2223#### `exception http.cookies.CookieError`2425Исключение, возникающее из-за недействительности [**RFC 2109**](https://python-all.ru/3.2/library/http.cookies.html): неверные атрибуты, неверный заголовок *Set-Cookie* и т.д.2627#### `class http.cookies.BaseCookie([input])`2829Этот класс представляет собой объект, подобный словарю, ключи которого – строки, а значения – экземпляры [`Morsel`](https://python-all.ru/3.2/library/http.cookies.html#http.cookies.Morsel). Обратите внимание, что при установке ключа в значение, это значение сначала преобразуется в [`Morsel`](https://python-all.ru/3.2/library/http.cookies.html#http.cookies.Morsel), содержащий ключ и значение.3031Если указан параметр *input*, он передаётся методу [`load()`](https://python-all.ru/3.2/library/http.cookies.html#http.cookies.BaseCookie.load).3233#### `class http.cookies.SimpleCookie([input])`3435Этот класс наследует от [`BaseCookie`](https://python-all.ru/3.2/library/http.cookies.html#http.cookies.BaseCookie) и переопределяет `value_decode()` и `value_encode()` как тождественную функцию и [`str()`](https://python-all.ru/3.2/library/functions.html#str) соответственно.3637> **См. также**38>39> **Модуль [`http.cookiejar`](https://python-all.ru/3.2/library/http.cookiejar.html#module-http.cookiejar)**40>41> Обработка HTTP cookie для веб-42>43> *клиентов*44>45> . Модули46>47> [`http.cookiejar`](https://python-all.ru/3.2/library/http.cookiejar.html#module-http.cookiejar)48>49> и50>51> [`http.cookies`](https://python-all.ru/3.2/library/http.cookies.html#module-http.cookies)52>53> не зависят друг от друга.54>55> **[**RFC 2109**](https://python-all.ru/3.2/library/http.cookies.html) – Механизм управления состоянием HTTP**56>57> Это спецификация управления состоянием, реализованная этим модулем.5859## 20.21.1. Объекты Cookie6061#### `BaseCookie.value_decode(val)`6263Возвращает декодированное значение из строкового представления. Возвращаемое значение может быть любого типа. Этот метод ничего не делает в [`BaseCookie`](https://python-all.ru/3.2/library/http.cookies.html#http.cookies.BaseCookie) – он существует для того, чтобы его можно было переопределить.6465#### `BaseCookie.value_encode(val)`6667Возвращает закодированное значение. *val* может быть любого типа, но возвращаемое значение должно быть строкой. Этот метод ничего не делает в [`BaseCookie`](https://python-all.ru/3.2/library/http.cookies.html#http.cookies.BaseCookie) – он существует, чтобы его можно было переопределить6869В общем случае предполагается, что [`value_encode()`](https://python-all.ru/3.2/library/http.cookies.html#http.cookies.BaseCookie.value_encode) и [`value_decode()`](https://python-all.ru/3.2/library/http.cookies.html#http.cookies.BaseCookie.value_decode) являются обратными функциями на области значений *value\_decode*.7071#### `BaseCookie.output(attrs=None, header='Set-Cookie:', sep='\r\n')`7273Возвращает строковое представление, пригодное для отправки в качестве HTTP-заголовков. *attrs* и *header* передаются методу [`output()`](https://python-all.ru/3.2/library/http.cookies.html#http.cookies.BaseCookie.output) каждого объекта [`Morsel`](https://python-all.ru/3.2/library/http.cookies.html#http.cookies.Morsel). *sep* используется для объединения заголовков; по умолчанию это комбинация `'\r\n'` (CRLF).7475#### `BaseCookie.js_output(attrs=None)`7677Возвращает встраиваемый фрагмент JavaScript, который при выполнении в браузере, поддерживающем JavaScript, будет действовать так же, как если бы были отправлены HTTP-заголовки.7879Значение *attrs* такое же, как в [`output()`](https://python-all.ru/3.2/library/http.cookies.html#http.cookies.BaseCookie.output).8081#### `BaseCookie.load(rawdata)`8283Если *rawdata* является строкой, она разбирается как `HTTP_COOKIE`, а найденные значения добавляются как объекты [`Morsel`](https://python-all.ru/3.2/library/http.cookies.html#http.cookies.Morsel). Если это словарь, то эквивалентно следующему:8485```python86for k, v in rawdata.items():87    cookie[k] = v88```8990## 20.21.2. Объекты Morsel9192#### `class http.cookies.Morsel`9394Абстрагирует пару ключ/значение с атрибутами [**RFC 2109**](https://python-all.ru/3.2/library/http.cookies.html).9596Объекты Morsel похожи на словари, и их набор ключей постоянен: это допустимые атрибуты [**RFC 2109**](https://python-all.ru/3.2/library/http.cookies.html), которые9798- `expires`99- `path`100- `comment`101- `domain`102- `max-age`103- `secure`104- `version`105- `httponly`106107Атрибут `httponly` указывает, что cookie передаётся только в HTTP-запросах и недоступна через JavaScript. Это предназначено для смягчения некоторых форм межсайтового скриптинга.108109Ключи нечувствительны к регистру.110111#### `Morsel.value`112113Значение cookie.114115#### `Morsel.coded_value`116117Закодированное значение cookie – именно его следует отправлять.118119#### `Morsel.key`120121Имя cookie.122123#### `Morsel.set(key, value, coded_value)`124125Устанавливает атрибуты *key*, *value* и *coded\_value*.126127#### `Morsel.isReservedKey(K)`128129Определяет, является ли *K* одним из ключей объекта [`Morsel`](https://python-all.ru/3.2/library/http.cookies.html#http.cookies.Morsel).130131#### `Morsel.output(attrs=None, header='Set-Cookie:')`132133Возвращает строковое представление объекта Morsel, подходящее для отправки в качестве HTTP-заголовка. По умолчанию включаются все атрибуты, если не указан *attrs*; в этом случае он должен быть списком используемых атрибутов. *header* по умолчанию равен `"Set-Cookie:"`.134135#### `Morsel.js_output(attrs=None)`136137Возвращает встраиваемый фрагмент JavaScript, который при выполнении в браузере, поддерживающем JavaScript, будет действовать так же, как если бы был отправлен HTTP-заголовок.138139Значение *attrs* такое же, как в [`output()`](https://python-all.ru/3.2/library/http.cookies.html#http.cookies.Morsel.output).140141#### `Morsel.OutputString(attrs=None)`142143Возвращает строку, представляющую Morsel, без какого-либо окружающего HTTP или JavaScript.144145Значение *attrs* такое же, как в [`output()`](https://python-all.ru/3.2/library/http.cookies.html#http.cookies.Morsel.output).146147## 20.21.3. Пример148149Следующий пример демонстрирует, как использовать модуль [`http.cookies`](https://python-all.ru/3.2/library/http.cookies.html#module-http.cookies).150151```python152>>> from http import cookies153>>> C = cookies.SimpleCookie()154>>> C["fig"] = "newton"155>>> C["sugar"] = "wafer"156>>> print(C) # сгенерировать HTTP-заголовки157Set-Cookie: fig=newton158Set-Cookie: sugar=wafer159>>> print(C.output()) # то же самое160Set-Cookie: fig=newton161Set-Cookie: sugar=wafer162>>> C = cookies.SimpleCookie()163>>> C["rocky"] = "road"164>>> C["rocky"]["path"] = "/cookie"165>>> print(C.output(header="Cookie:"))166Cookie: rocky=road; Path=/cookie167>>> print(C.output(attrs=[], header="Cookie:"))168Cookie: rocky=road169>>> C = cookies.SimpleCookie()170>>> C.load("chips=ahoy; vienna=finger") # загрузить из строки (HTTP-заголовок)171>>> print(C)172Set-Cookie: chips=ahoy173Set-Cookie: vienna=finger174>>> C = cookies.SimpleCookie()175>>> C.load('keebler="E=everybody; L=\\"Loves\\"; fudge=\\012;";')176>>> print(C)177Set-Cookie: keebler="E=everybody; L=\"Loves\"; fudge=\012;"178>>> C = cookies.SimpleCookie()179>>> C["oreo"] = "doublestuff"180>>> C["oreo"]["path"] = "/"181>>> print(C)182Set-Cookie: oreo=doublestuff; Path=/183>>> C = cookies.SimpleCookie()184>>> C["twix"] = "none for you"185>>> C["twix"].value186'none for you'187>>> C = cookies.SimpleCookie()188>>> C["number"] = 7 # эквивалентно C["number"] = str(7)189>>> C["string"] = "seven"190>>> C["number"].value191'7'192>>> C["string"].value193'seven'194>>> print(C)195Set-Cookie: number=7196Set-Cookie: string=seven197```198