http.cookiejar
— Cookie handling for HTTP clients¶
Вихідний код: Lib/http/cookiejar.py
Модуль http.cookiejar
визначає класи для автоматичної обробки файлів cookie HTTP. Це корисно для доступу до веб-сайтів, яким потрібні невеликі фрагменти даних — cookies — які встановлюються на клієнтській машині за допомогою відповіді HTTP від веб-сервера, а потім повертаються на сервер у наступних запитах HTTP.
Обробляються як звичайний протокол cookie Netscape, так і протокол, визначений RFC 2965. Обробку RFC 2965 вимкнено за замовчуванням. RFC 2109 файли cookie аналізуються як файли cookie Netscape і згодом розглядаються як файли cookie Netscape або RFC 2965 відповідно до чинної «політики». Зверніть увагу, що більшість файлів cookie в Інтернеті є файлами cookie Netscape. http.cookiejar
намагається слідувати фактичному протоколу файлів cookie Netscape (який суттєво відрізняється від викладеного в оригінальній специфікації Netscape), включно з врахуванням max-age
і port
атрибути cookie, введені з RFC 2965.
Примітка
Різноманітні іменовані параметри, які містяться в заголовках Set-Cookie і Set-Cookie2 (наприклад, domain
і expires
), зазвичай називаються attributes . Щоб відрізнити їх від атрибутів Python, у документації для цього модуля замість цього використовується термін cookie-attribute.
Модуль визначає такий виняток:
- exception http.cookiejar.LoadError¶
Екземпляри
FileCookieJar
викликають цей виняток, якщо неможливо завантажити файли cookie з файлу.LoadError
є підкласомOSError
.
Передбачені такі заняття:
- class http.cookiejar.CookieJar(policy=None)¶
policy — це об’єкт, що реалізує інтерфейс
CookiePolicy
.Клас
CookieJar
зберігає файли cookie HTTP. Він витягує файли cookie із HTTP-запитів і повертає їх у HTTP-відповідях. ПримірникиCookieJar
автоматично припиняють дію файлів cookie, коли це необхідно. Підкласи також відповідають за зберігання та отримання файлів cookie з файлу або бази даних.
- class http.cookiejar.FileCookieJar(filename=None, delayload=None, policy=None)¶
policy — це об’єкт, що реалізує інтерфейс
CookiePolicy
. Інші аргументи дивіться в документації для відповідних атрибутів.CookieJar
, який може завантажувати файли cookie з файлу на диску та, можливо, зберігати файли cookie. Файли cookie НЕ завантажуються з названого файлу, доки не буде викликано методload()
абоrevert()
. Підкласи цього класу задокументовані в розділі Підкласи FileCookieJar і співпраця з веб-браузерами.This should not be initialized directly – use its subclasses below instead.
Змінено в версії 3.8: Параметр імені файлу підтримує path-like object.
- class http.cookiejar.CookiePolicy¶
Цей клас відповідає за прийняття рішення про прийняття кожного файлу cookie від сервера або повернення на нього.
- class http.cookiejar.DefaultCookiePolicy(blocked_domains=None, allowed_domains=None, netscape=True, rfc2965=False, rfc2109_as_netscape=None, hide_cookie2=False, strict_domain=False, strict_rfc2965_unverifiable=True, strict_ns_unverifiable=False, strict_ns_domain=DefaultCookiePolicy.DomainLiberal, strict_ns_set_initial_dollar=False, strict_ns_set_path=False, secure_protocols=('https', 'wss'))¶
Аргументи конструктора слід передавати лише як аргументи ключових слів. blocked_domains – це послідовність доменних імен, з яких ми ніколи не приймаємо файли cookie та не повертаємо файли cookie. allowed_domains якщо не
None
, це послідовність єдиних доменів, для яких ми приймаємо та повертаємо файли cookie. secure_protocols — це послідовність протоколів, до яких можна додати захищені файли cookie. За умовчанням https і wss (безпечний веб-сокет) вважаються безпечними протоколами. Усі інші аргументи дивіться в документації для об’єктівCookiePolicy
іDefaultCookiePolicy
.DefaultCookiePolicy
реалізує стандартні правила прийняття/відхилення файлів cookie Netscape і RFC 2965. За замовчуванням файли cookie RFC 2109 (тобто файли cookie, отримані в заголовку Set-Cookie з атрибутом cookie версії 1) обробляються відповідно до правил RFC 2965. Проте, якщо обробку RFC 2965 вимкнено абоrfc2109_as_netscape
має значенняTrue
, файли cookie RFC 2109 «понижуються» екземпляромCookieJar
до файлів cookie Netscape, встановлюючиversion
екземпляраCookie
дорівнює 0.DefaultCookiePolicy
також надає деякі параметри, щоб дозволити деяке тонке налаштування політики.
- class http.cookiejar.Cookie¶
Цей клас представляє файли cookie Netscape, RFC 2109 і RFC 2965. Не очікується, що користувачі
http.cookiejar
створюватимуть власні екземпляриCookie
. Замість цього, якщо необхідно, викличтеmake_cookies()
на екземпляріCookieJar
.
Дивись також
- Модуль
urllib.request
Відкриття URL-адреси з автоматичною обробкою файлів cookie.
- Модуль
http.cookies
Класи cookie HTTP, які в основному корисні для коду на стороні сервера. Модулі
http.cookiejar
іhttp.cookies
не залежать один від одного.- https://curl.se/rfc/cookie_spec.html
Специфікація оригінального протоколу cookie Netscape. Хоча це все ще домінуючий протокол, «протокол файлів cookie Netscape», реалізований усіма основними браузерами (і
http.cookiejar
), лише побіжно схожий на той, який накреслено вcookie_spec.html
.- RFC 2109 - механізм керування станом HTTP
Застаріло RFC 2965. Використовує Set-Cookie з версією=1.
- RFC 2965 - механізм керування станом HTTP
Протокол Netscape з виправленими помилками. Використовує Set-Cookie2 замість Set-Cookie. Широко не використовується.
- https://kristol.org/cookie/errata.html
Незавершені помилки до RFC 2965.
RFC 2964 - Використання керування станом HTTP
Об’єкти CookieJar і FileCookieJar¶
Об’єкти CookieJar
підтримують протокол iterator для ітерації об’єктів Cookie
.
CookieJar
має такі методи:
- CookieJar.add_cookie_header(request)¶
Додайте правильний заголовок Cookie до запиту.
Якщо політика дозволяє (тобто атрибути
rfc2965
іhide_cookie2
екземпляраCookieJar
CookiePolicy
мають значення true і false відповідно), Заголовок Cookie2 також додається, коли це необхідно.The request object (usually a
urllib.request.Request
instance) must support the methodsget_full_url()
,has_header()
,get_header()
,header_items()
,add_unredirected_header()
and the attributeshost
,type
,unverifiable
andorigin_req_host
as documented byurllib.request
.Змінено в версії 3.3: Об’єкту request потрібен атрибут
origin_req_host
. Залежність від застарілого методуget_origin_req_host()
видалено.
- CookieJar.extract_cookies(response, request)¶
Отримайте файли cookie з відповіді HTTP та зберігайте їх у
CookieJar
, де це дозволено політикою.CookieJar
шукатиме допустимі заголовки Set-Cookie і Set-Cookie2 в аргументі response і зберігатиме файли cookie відповідно (згідно зCookiePolicy .set_ok()
підтвердження методу).Об’єкт response (зазвичай це результат виклику
urllib.request.urlopen()
або подібного) має підтримувати методinfo()
, який повертаєemail.message.Message.
екземпляр.The request object (usually a
urllib.request.Request
instance) must support the methodget_full_url()
and the attributeshost
,unverifiable
andorigin_req_host
, as documented byurllib.request
. The request is used to set default values for cookie-attributes as well as for checking that the cookie is allowed to be set.Змінено в версії 3.3: Об’єкту request потрібен атрибут
origin_req_host
. Залежність від застарілого методуget_origin_req_host()
видалено.
- CookieJar.set_policy(policy)¶
Встановіть екземпляр
CookiePolicy
для використання.
- CookieJar.make_cookies(response, request)¶
Послідовність повернення об’єктів
Cookie
, отриманих з об’єкта response.Перегляньте документацію для
extract_cookies()
для інтерфейсів, необхідних для аргументів response і request.
- CookieJar.set_cookie_if_ok(cookie, request)¶
Встановіть
Cookie
, якщо політика стверджує, що це допустимо.
- CookieJar.set_cookie(cookie)¶
Встановіть
Cookie
, не перевіряючи політику, чи потрібно його встановлювати.
- CookieJar.clear([domain[, path[, name]]])¶
Очистити деякі файли cookie.
Якщо виклик викликаний без аргументів, видалити всі файли cookie. Якщо надати один аргумент, буде видалено лише файли cookie, що належать цьому домену. Якщо задано два аргументи, файли cookie, що належать до вказаного домену та шляху URL-адреси, видаляються. Якщо задано три аргументи, файл cookie з указаним доменом, шляхом і ім’ям видаляється.
Викликає
KeyError
, якщо не існує відповідного файлу cookie.
- CookieJar.clear_session_cookies()¶
Видалити всі файли cookie сесії.
Відкидає всі файли cookie, які мають справжній атрибут
discard
(зазвичай тому, що вони не мали атрибута cookiemax-age
абоexpires
, або явного атрибутаdiscard
cookie-attribute ). Для інтерактивних браузерів кінець сеансу зазвичай відповідає закриттю вікна браузера.Зауважте, що метод
save()
все одно не зберігатиме файли cookie сеансу, якщо ви не запитаєте інше, передавши справжній аргумент ignore_discard.
FileCookieJar
реалізує такі додаткові методи:
- FileCookieJar.save(filename=None, ignore_discard=False, ignore_expires=False)¶
Збережіть файли cookie у файл.
Цей базовий клас викликає
NotImplementedError
. Підкласи можуть залишати цей метод нереалізованим.ім’я файлу — це ім’я файлу, у якому зберігатимуться файли cookie. Якщо filename не вказано,
self.filename
використовується (яке за умовчанням є значенням, переданим конструктору, якщо такий є); якщоself.filename
має значенняNone
, виникаєValueError
.ignore_discard: зберегти навіть файли cookie, налаштовані на видалення. ignore_expires: зберігати навіть файли cookie, термін дії яких закінчився
Файл перезаписується, якщо він уже існує, таким чином знищуючи всі файли cookie, які він містить. Збережені файли cookie можна відновити пізніше за допомогою методів
load()
абоrevert()
.
- FileCookieJar.load(filename=None, ignore_discard=False, ignore_expires=False)¶
Завантажити файли cookie з файлу.
Старі файли cookie зберігаються, якщо вони не перезаписані новозавантаженими.
Аргументи такі ж, як для
save()
.Названий файл має бути у форматі, зрозумілому класу, інакше виникне
LoadError
. Крім того, може виникатиOSError
, наприклад, якщо файл не існує.
- FileCookieJar.revert(filename=None, ignore_discard=False, ignore_expires=False)¶
Очистіть усі файли cookie та перезавантажте файли cookie зі збереженого файлу.
revert()
може викликати ті самі винятки, що іload()
. Якщо станеться збій, стан об’єкта не зміниться.
Екземпляри FileCookieJar
мають такі публічні атрибути:
- FileCookieJar.filename¶
Назва файлу за замовчуванням, у якому зберігатимуться файли cookie. Цей атрибут можна призначити.
- FileCookieJar.delayload¶
Якщо істина, ліниво завантажувати файли cookie з диска. Цей атрибут не слід призначати. Це лише підказка, оскільки це впливає лише на продуктивність, а не на поведінку (якщо файли cookie на диску не змінюються). Об’єкт
CookieJar
може його ігнорувати. Жоден із класівFileCookieJar
, включених до стандартної бібліотеки, не завантажує файли cookie ліниво.
Підкласи FileCookieJar і співпраця з веб-браузерами¶
Наступні підкласи CookieJar
надаються для читання та запису.
- class http.cookiejar.MozillaCookieJar(filename=None, delayload=None, policy=None)¶
A
FileCookieJar
that can load from and save cookies to disk in the Mozillacookies.txt
file format (which is also used by curl and the Lynx and Netscape browsers).Примітка
Це втрачає інформацію про RFC 2965 файли cookie, а також про нові або нестандартні атрибути файлів cookie, такі як
порт
.Попередження
Зробіть резервну копію файлів cookie перед збереженням, якщо у вас є файли cookie, втрата/пошкодження яких було б незручним (є деякі тонкощі, які можуть призвести до незначних змін у файлі під час завантаження/збереження в обидві сторони).
Також зауважте, що файли cookie, збережені під час роботи Mozilla, будуть видалені Mozilla.
- class http.cookiejar.LWPCookieJar(filename=None, delayload=None, policy=None)¶
FileCookieJar
, який може завантажувати та зберігати файли cookie на диск у форматі, сумісному з форматом файлуSet-Cookie3
бібліотеки libwww-perl. Це зручно, якщо ви хочете зберігати файли cookie у файлі, який читає людина.Змінено в версії 3.8: Параметр імені файлу підтримує path-like object.
Об’єкти CookiePolicy¶
Об’єкти, що реалізують інтерфейс CookiePolicy
, мають такі методи:
- CookiePolicy.set_ok(cookie, request)¶
Повертає логічне значення, яке вказує, чи слід прийняти cookie від сервера.
cookie є екземпляром
Cookie
. request — це об’єкт, що реалізує інтерфейс, визначений документацією дляCookieJar.extract_cookies()
.
- CookiePolicy.return_ok(cookie, request)¶
Повернути логічне значення, яке вказує, чи потрібно повертати файл cookie на сервер.
cookie є екземпляром
Cookie
. request — це об’єкт, що реалізує інтерфейс, визначений документацією дляCookieJar.add_cookie_header()
.
- CookiePolicy.domain_return_ok(domain, request)¶
Повертає
False
, якщо файли cookie не повинні повертатися, враховуючи домен файлів cookie.Цей метод є оптимізаційним. Це позбавляє від необхідності перевіряти кожен файл cookie з певним доменом (що може передбачати читання багатьох файлів). Повернення true з
domain_return_ok()
іpath_return_ok()
залишає всю роботуreturn_ok()
.Якщо
domain_return_ok()
повертає true для домену cookie,path_return_ok()
викликається для шляху до cookie. В іншому випадкуpath_return_ok()
іreturn_ok()
ніколи не викликаються для цього домену cookie. Якщоpath_return_ok()
повертає true,return_ok()
викликається з самим об’єктомCookie
для повної перевірки. Інакшеreturn_ok()
ніколи не викликається для цього шляху cookie.Зауважте, що
domain_return_ok()
викликається для кожного домену cookie, а не лише для домену request. Наприклад, функція може бути викликана як з".example.com"
, так і з"www.example.com"
, якщо домен запиту"www.example.com"
. Те саме стосуєтьсяpath_return_ok()
.Аргумент request відповідає документації для
return_ok()
.
- CookiePolicy.path_return_ok(path, request)¶
Повертає
False
, якщо файли cookie не повинні повертатися, враховуючи шлях до файлів cookie.Перегляньте документацію для
domain_return_ok()
.
На додаток до реалізації наведених вище методів, реалізації інтерфейсу CookiePolicy
також повинні надавати такі атрибути, що вказують, які протоколи слід використовувати та як. Усі ці атрибути можна призначити.
- CookiePolicy.netscape¶
Впровадити протокол Netscape.
- CookiePolicy.hide_cookie2¶
Не додавайте заголовок Cookie2 до запитів (наявність цього заголовка вказує серверу, що ми розуміємо файли cookie RFC 2965).
Найкориснішим способом визначення класу CookiePolicy
є створення підкласу з DefaultCookiePolicy
і перевизначення деяких або всіх методів вище. Сама CookiePolicy
може використовуватися як «нульова політика», щоб дозволити встановлення та отримання будь-яких і всіх файлів cookie (це навряд чи буде корисним).
Об’єкти DefaultCookiePolicy¶
Реалізує стандартні правила прийому та повернення файлів cookie.
Охоплено файли cookie RFC 2965 і Netscape. Обробку RFC 2965 вимкнено за замовчуванням.
Найпростіший спосіб надати власну політику — перевизначити цей клас і викликати його методи у своїх перевизначених реалізаціях перед додаванням власних додаткових перевірок:
import http.cookiejar
class MyCookiePolicy(http.cookiejar.DefaultCookiePolicy):
def set_ok(self, cookie, request):
if not http.cookiejar.DefaultCookiePolicy.set_ok(self, cookie, request):
return False
if i_dont_want_to_store_this_cookie(cookie):
return False
return True
На додаток до функцій, необхідних для реалізації інтерфейсу CookiePolicy
, цей клас дозволяє блокувати та дозволяти доменам установлювати та отримувати файли cookie. Є також деякі перемикачі суворості, які дозволяють трохи посилити досить вільні правила протоколу Netscape (ціною блокування деяких безпечних файлів cookie).
Надається список заблокованих і білих доменів (обидва вимкнено за умовчанням). У налаштуваннях і поверненні файлів cookie беруть участь лише домени, яких немає в списку блокувань, але присутні в списку дозволених (якщо список дозволених активний). Використовуйте аргумент конструктора blocked_domains і методи blocked_domains()
і set_blocked_domains()
(а також відповідний аргумент і методи для allowed_domains). Якщо ви встановили білий список, ви можете вимкнути його знову, встановивши для нього значення None
.
Домени в списках блокування або дозволу, які не починаються з крапки, мають збігатися з доменом файлів cookie, який потрібно знайти. Наприклад, "example.com"
відповідає запису списку блокувань "example.com"
, але "www.example.com"
ні. Домени, які починаються з крапки, також відповідають більш конкретним доменам. Наприклад, і "www.example.com"
, і "www.coyote.example.com"
відповідають ".example.com"
(але "example.com"
сам по собі не робить). IP-адреси є винятком і мають точно збігатися. Наприклад, якщо blocked_domains містить "192.168.1.2"
і ".168.1.2"
, 192.168.1.2 заблоковано, а 193.168.1.2 – ні.
DefaultCookiePolicy
реалізує такі додаткові методи:
- DefaultCookiePolicy.blocked_domains()¶
Повертає послідовність заблокованих доменів (у вигляді кортежу).
- DefaultCookiePolicy.set_blocked_domains(blocked_domains)¶
Встановіть послідовність заблокованих доменів.
- DefaultCookiePolicy.is_blocked(domain)¶
Return
True
if domain is on the blocklist for setting or receiving cookies.
- DefaultCookiePolicy.allowed_domains()¶
Повернути
None
або послідовність дозволених доменів (як кортеж).
- DefaultCookiePolicy.set_allowed_domains(allowed_domains)¶
Встановіть послідовність дозволених доменів або
None
.
- DefaultCookiePolicy.is_not_allowed(domain)¶
Return
True
if domain is not on the allowlist for setting or receiving cookies.
DefaultCookiePolicy
екземпляри мають наведені нижче атрибути, які всі ініціалізуються однойменними аргументами конструктора, і які всі можуть бути призначені.
- DefaultCookiePolicy.rfc2109_as_netscape¶
Якщо істина, вимагайте, щоб екземпляр
CookieJar
повернув файли cookie RFC 2109 (тобто файли cookie, отримані в заголовку Set-Cookie з атрибутом cookie-версії 1) до файлів cookie Netscape встановлення атрибута версії екземпляраCookie
на 0. Значенням за замовчуванням єNone
, у цьому випадку файли cookie RFC 2109 повертаються до попередньої версії тоді і тільки якщо обробку RFC 2965 вимкнено. Тому за замовчуванням файли cookie RFC 2109 знижуються.
Перемикачі загальної жорсткості:
- DefaultCookiePolicy.strict_domain¶
Не дозволяйте сайтам встановлювати двокомпонентні домени з доменами верхнього рівня з кодом країни, наприклад
.co.uk
,.gov.uk
,.co.nz
.etc. Це далеко не ідеально і не гарантовано спрацює!
RFC 2965 перемикачі суворості протоколу:
- DefaultCookiePolicy.strict_rfc2965_unverifiable¶
Дотримуйтеся правил RFC 2965 щодо транзакцій, які не підлягають перевірці (зазвичай транзакція, яка не підлягає перевірці, є транзакцією, яка є результатом перенаправлення або запиту зображення, розміщеного на іншому сайті). Якщо це невірно, файли cookie ніколи не блокуються на основі можливості перевірки
Перемикачі суворості протоколу Netscape:
- DefaultCookiePolicy.strict_ns_unverifiable¶
Застосовуйте правила RFC 2965 до транзакцій, які неможливо перевірити, навіть до файлів cookie Netscape.
- DefaultCookiePolicy.strict_ns_domain¶
Прапорці, які вказують на те, наскільки суворими є правила відповідності домену для файлів cookie Netscape. Допустимі значення див. нижче.
- DefaultCookiePolicy.strict_ns_set_initial_dollar¶
Ігноруйте файли cookie в Set-Cookie: заголовки, імена яких починаються з
'$'
.
- DefaultCookiePolicy.strict_ns_set_path¶
Заборонити встановлення файлів cookie, шлях яких не відповідає URI запиту.
strict_ns_domain
is a collection of flags. Its value is constructed by
or-ing together (for example, DomainStrictNoDots|DomainStrictNonDomain
means
both flags are set).
- DefaultCookiePolicy.DomainStrictNoDots¶
Під час встановлення файлів cookie «префікс хосту» не повинен містити крапку (наприклад,
www.foo.bar.com
не може встановити файл cookie для.bar.com
, оскількиwww.foo
містить крапку).
- DefaultCookiePolicy.DomainStrictNonDomain¶
Файли cookie, у яких явно не вказано атрибут cookie домену, можна повернути лише в домен, який відповідає домену, який встановив файл cookie (наприклад, spam.example.com не повертатиме файли cookie з
example.com
, який не мав атрибута cookiedomain
).
- DefaultCookiePolicy.DomainRFC2965Match¶
Під час встановлення файлів cookie вимагайте повного збігу домену RFC 2965.
Наступні атрибути надано для зручності та є найкориснішими комбінаціями наведених вище позначок:
- DefaultCookiePolicy.DomainLiberal¶
Еквівалент 0 (тобто всі наведені вище позначки суворості домену Netscape вимкнено).
- DefaultCookiePolicy.DomainStrict¶
Еквівалент
DomainStrictNoDots|DomainStrictNonDomain
.
Об’єкти cookie¶
Екземпляри Cookie
мають атрибути Python, які приблизно відповідають стандартним атрибутам cookie, визначеним у різних стандартах cookie. Відповідність не є однозначною, оскільки існують складні правила для призначення значень за замовчуванням, тому що атрибути cookie max-age
і expires
містять еквівалентну інформацію, і тому, що RFC 2109 http.cookiejar
може «понизити» файли cookie з версії 1 до версії 0 (Netscape).
Призначення цих атрибутів не повинно бути необхідним, крім рідкісних випадків у методі CookiePolicy
. Клас не забезпечує внутрішньої узгодженості, тому ви повинні знати, що ви робите, якщо це робите.
- Cookie.version¶
Ціле чи
None
. Файли cookie Netscape маютьversion
0. Файли cookie RFC 2965 і RFC 2109 мають атрибут cookieversion
1. Однак зауважте, щоhttp.cookiejar
може «понизити» файли cookie RFC 2109 до файлів cookie Netscape, у цьому випадкуversion
дорівнює 0.
- Cookie.name¶
Назва файлу cookie (рядок).
- Cookie.port¶
Рядок, що представляє порт або набір портів (наприклад, „80“, або „80,8080“), або
None
.
- Cookie.domain¶
Cookie domain (a string).
- Cookie.path¶
Шлях файлу cookie (рядок, наприклад,
'/acme/rocket_launchers'
).
- Cookie.secure¶
True
, якщо cookie має повертатися лише через безпечне з’єднання.
- Cookie.expires¶
Ціла дата закінчення терміну дії в секундах з епохи або
None
. Дивіться також методis_expired()
.
- Cookie.discard¶
True
, якщо це сеансовий файл cookie.
- Cookie.comment_url¶
URL-адреса з посиланням на коментар із сервера, що пояснює функцію цього файлу cookie, або
None
.
- Cookie.rfc2109¶
True
, якщо цей файл cookie було отримано як файл cookie RFC 2109 (тобто файл cookie надійшов у заголовок Set-Cookie, а значення атрибута cookie Version у цьому заголовку було 1). Цей атрибут надається тому, щоhttp.cookiejar
може «понизити» файли cookie RFC 2109 до файлів cookie Netscape, у такому випадкуversion
дорівнює 0.
- Cookie.port_specified¶
True
, якщо порт або набір портів було явно вказано сервером (у заголовку Set-Cookie / Set-Cookie2).
- Cookie.domain_specified¶
True
, якщо домен явно вказано сервером.
- Cookie.domain_initial_dot¶
True
, якщо домен, явно вказаний сервером, починається з крапки ('.''
).
Файли cookie можуть мати додаткові нестандартні атрибути файлів cookie. До них можна отримати доступ за допомогою таких методів:
- Cookie.has_nonstandard_attr(name)¶
Повертає
True
, якщо cookie має названий атрибут cookie.
- Cookie.get_nonstandard_attr(name, default=None)¶
Якщо cookie має названий атрибут cookie, повертає його значення. В іншому випадку поверніть default.
- Cookie.set_nonstandard_attr(name, value)¶
Установіть значення іменованого атрибута cookie.
Клас Cookie
також визначає такий метод:
- Cookie.is_expired(now=None)¶
True
, якщо термін дії файлу cookie минув, коли його запитував сервер. Якщо вказано now (у секундах з епохи), повертається, чи закінчився термін дії файлу cookie у вказаний час.
Приклади¶
Перший приклад показує найпоширеніше використання http.cookiejar
:
import http.cookiejar, urllib.request
cj = http.cookiejar.CookieJar()
opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cj))
r = opener.open("http://example.com/")
У цьому прикладі показано, як відкрити URL-адресу за допомогою файлів cookie Netscape, Mozilla або Lynx (припускається, що для розташування файлу cookie використовується угода Unix/Netscape):
import os, http.cookiejar, urllib.request
cj = http.cookiejar.MozillaCookieJar()
cj.load(os.path.join(os.path.expanduser("~"), ".netscape", "cookies.txt"))
opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cj))
r = opener.open("http://example.com/")
Наступний приклад ілюструє використання DefaultCookiePolicy
. Увімкніть файли cookie RFC 2965, будьте суворішими щодо доменів під час встановлення та повернення файлів cookie Netscape і забороніть деяким доменам установлювати або повертати файли cookie:
import urllib.request
from http.cookiejar import CookieJar, DefaultCookiePolicy
policy = DefaultCookiePolicy(
rfc2965=True, strict_ns_domain=Policy.DomainStrict,
blocked_domains=["ads.net", ".ads.net"])
cj = CookieJar(policy)
opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cj))
r = opener.open("http://example.com/")