Сообщить об ошибке.

Класс DefaultCookiePolicy() модуля http.cookiejar в Python

Правила приема и возврата клиентом файлов cookie

Синтаксис:

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:

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/')