import http.cookiejar 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=None
- список доменных имен,allowed_domains=None
- список доменных имен,netscape=True
- реализует протокол Netscape,rfc2965=False
- реализует протокол rfc2965,rfc2109_as_netscape=None
- понижает версию cookie RFC 2109 до cookie Netscape,hide_cookie2=False
- отвечает за установку заголовков cookie версии 2,strict_domain=False
- переключатель общей строгости,strict_rfc2965_unverifiable=True
- переключатель строгости протокола RFC 2965,strict_ns_unverifiable=False
- переключатель строгости протокола Netscape,strict_ns_domain=DefaultCookiePolicy.DomainLiberal
- правила сопоставления доменов для cookie,strict_ns_set_initial_dollar=False
- игнорирует cookie начинаются с символа '$',strict_ns_set_path=False
- запрещает cookie, путь которых не соответствует URI запроса,secure_protocols=("https", "wss")
- список протоколов, от которых принимаются безопасные cookie.Класс DefaultCookiePolicy()
модуля http.cookiejar
реализует стандартные правила приема и возврата клиентом файлов cookie.
Аргумент blocked_domains
- это последовательность доменных имен, от которых клиент никогда не принимает файлы 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, путем установки для атрибута версии экземпляра Cookie значения 0.
Класс DefaultCookiePolicy
также предоставляет некоторые параметры, позволяющие осуществить тонкую настройку политики.
DefaultCookiePolicy
.Поддерживаются как RFC 2965, так и файлы cookie 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
и методы DefaultCookiePolicy.blocked_domains()
и DefaultCookiePolicy.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
наследует все методы класса CookiePolicy
, а тек же реализует дополнительные:
DefaultCookiePolicy
:.blocked_domains()
возвращает заблокированные домены,.set_blocked_domains()
устанавливает черный список для доменов,.is_blocked()
проверяет домен в черном списке,.allowed_domains()
возвращает разрешенные домены,.set_allowed_domains()
устанавливает белый список для доменов,.is_not_allowed()
проверяет домен в белом списке,DefaultCookiePolicy
:.rfc2109_as_netscape
понижает cookie RFC 2109 до cookie Netscape,.strict_domain
переключатель общей строгости,.strict_rfc2965_unverifiable
переключатель строгости протокола RFC 2965,.strict_ns_unverifiable
переключатель строгости протокола Netscape,.strict_ns_domain
правила сопоставления доменов для cookie,.strict_ns_set_initial_dollar
игнорирует cookie, начинаются с символа '$'
,.strict_ns_set_path
запрещает cookie, если путь не соответствует URI запроса,DefaultCookiePolicy.strict_ns_domain
:.DomainStrictNoDots
префикс хоста не должен содержать точки,.DomainStrictNonDomain
как обрабатывать cookie в которых нет атрибута domain
,.DomainRFC2965Match
полное соответствие домена RFC 2965,.DomainLiberal
все флаги строгости выключены,.DomainStrict
эквивалент DomainStrictNoDots|DomainStrictNonDomain
,DefaultCookiePolicy
:DefaultCookiePolicy.blocked_domains()
:Метод DefaultCookiePolicy.blocked_domains()
возвращает None
или последовательность заблокированных доменов в виде кортежа.
DefaultCookiePolicy.set_blocked_domains(blocked_domains)
:Метод DefaultCookiePolicy.set_blocked_domains()
устанавливает последовательность blocked_domains
блокируемых доменов.
DefaultCookiePolicy.is_blocked(domain)
:Метод DefaultCookiePolicy.is_blocked()
проверяет, находится ли домен domain
в черном списке для установки или получения файлов cookie.
DefaultCookiePolicy.allowed_domains()
:Метод DefaultCookiePolicy.allowed_domains()
возвращает None
или последовательность разрешенных доменов в виде кортежа.
DefaultCookiePolicy.set_allowed_domains(allowed_domains)
:Метод DefaultCookiePolicy.set_allowed_domains()
устанавливает последовательность allowed_domains
разрешенных доменов.
DefaultCookiePolicy.is_not_allowed(domain)
:Метод DefaultCookiePolicy.is_not_allowed()
проверяет, нет ли домена domain
в белом списке для настройки или получения файлов cookie.
DefaultCookiePolicy
:Экземпляры DefaultCookiePolicy
имеют следующие изменяемые атрибуты, которые инициализируются одноименными аргументами конструктора. Все они могут быть переназначены.
DefaultCookiePolicy.rfc2109_as_netscape
:Атрибут DefaultCookiePolicy.rfc2109_as_netscape
понижает версию cookie RFC 2109 до cookie Netscape.
Если True
, то запрашивает, чтобы экземпляр CookieJar
понизил версию cookie RFC 2109, (т. е. cookie, полученные в заголовке Set-Cookie
с атрибутом cookie версии 1), на файлы cookie Netscape, установив для атрибута версии экземпляра Cookie
значение 0.
Значение по умолчанию равно None
, в этом случае файлы cookie RFC 2109 понижены до cookie Netscape, если только отключена обработка RFC 2965.
DefaultCookiePolicy.strict_domain
:Атрибут DefaultCookiePolicy.strict_domain
представляет собой переключатель общей строгости.
Не разрешает сайтам создавать двухкомпонентные домены с национальными доменами верхнего уровня, такими как .co.uk
, .gov.uk
, .co.nz.etc
. Это далеко не идеально и не гарантирует правильной работы!
DefaultCookiePolicy.strict_rfc2965_unverifiable
:Атрибут DefaultCookiePolicy.strict_rfc2965_unverifiable
представляет собой переключатель строгости протокола RFC 2965.
Следует правилам RFC 2965 в отношении непроверяемых транзакций (обычно непроверяемая транзакция является результатом перенаправления или запроса изображения, размещенного на другом сайте). Если это неверно, то файлы cookie никогда не блокируются на основании проверяемости.
DefaultCookiePolicy.strict_ns_unverifiable
:Атрибут DefaultCookiePolicy.strict_ns_unverifiable
представляет собой переключатель строгости протокола Netscape.
Применяет правила RFC 2965 к непроверяемым транзакциям даже к файлам cookie Netscape.
DefaultCookiePolicy.strict_ns_domain
:Атрибут DefaultCookiePolicy.strict_ns_domain
представляет собой флаги, указывающие, насколько строгими должны быть правила сопоставления доменов для файлов cookie Netscape. Допустимые значения смотрите ниже.
DefaultCookiePolicy.strict_ns_set_initial_dollar
:Атрибут DefaultCookiePolicy.strict_ns_set_initial_dollar
игнорирует файлы cookie в заголовках Set-Cookie:
, имена которых начинаются с символа '$'
.
DefaultCookiePolicy.strict_ns_set_path
:Атрибут DefaultCookiePolicy.strict_ns_set_path
не разрешает установку файлов cookie, путь которых не соответствует URI запроса.
DefaultCookiePolicy.strict_ns_domain
:Значение для атрибута может создаваться путем объединения например, DomainStrictNoDots|DomainStrictNonDomain
- означает, что установлены оба флага.
DefaultCookiePolicy.DomainStrictNoDots
:Флаг DefaultCookiePolicy.DomainStrictNoDots
устанавливается, если префикс хоста не должен содержать точки.
Например, www.foo.bar.com
не может установить файл cookie для .bar.com
, поскольку www.foo
содержит точку.
DefaultCookiePolicy.DomainStrictNonDomain
:Флаг DefaultCookiePolicy.DomainStrictNonDomain
устанавливается при настройке файлов cookie, в которых явно не указан атрибут domain
, могут быть возвращены только в домен, равный домену, который установил cookie.
Например, spam.example.com
не будет возвращен cookie из example.com
, у которого не было домена cookie- атрибут).
DefaultCookiePolicy.DomainRFC2965Match
:Атрибут DefaultCookiePolicy.DomainRFC2965Match
устанавливается при настройке файлов cookie, для которых требуется полное соответствие домена RFC 2965.
Следующие атрибуты предоставляются для удобства и представляют собой наиболее полезные комбинации указанных выше флагов:
DefaultCookiePolicy.DomainLiberal
:Флаг DefaultCookiePolicy.DomainLiberal
эквивалентен 0 (т. е. все вышеупомянутые флаги строгости домена Netscape выключены).
DefaultCookiePolicy.DomainStrict
:Флаг DefaultCookiePolicy.DomainStrict
эквивалентен DomainStrictNoDots|DomainStrictNonDomain
.
DefaultCookiePolicy
:В примере включаются файлы cookie RFC 2965, что станет более строгими в отношении доменов при установке и возврате файлов cookie Netscape, а так же блокируются некоторые домены от установки файлов cookie клиенту или их возврата на сервер:
import urllib.request from http.cookiejar import CookieJar, DefaultCookiePolicy # настройка политики приема Cookie policy = DefaultCookiePolicy(rfc2965=True, strict_ns_domain=policy.DomainStrict, blocked_domains=["ads.net", ".ads.net"]) # применение политики к хранилищу Cookie cj = CookieJar(policy) # подключаем обработчик Cookie `HTTPCookieProcessor` opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cj)) # Установим обработчик Cookie глобально, чтобы его можно # было использовать с функцией `urlopen()`. urllib.request.install_opener(opener) # делаем запросы к сайту urllib.request.urlopen('http://example.com/')