##
4 DefaultCookiePolicy オブジェクト

クッキーを受けつけ、またそれを返す際の標準的なルールを実装します。

RFC 2965 クッキーと Netscape クッキーの両方に対応しています。 デフォルトでは、RFC 2965 の処理はオフになっています。

自分のポリシーを提供するいちばん簡単な方法は、このクラスを継承して、 自分用の追加チェックの前にオーバーライドした元のメソッドを呼び出すことです:

    import cookielib
    class MyCookiePolicy(cookielib.DefaultCookiePolicy):
        def set_ok(self, cookie, request):
            if not cookielib.DefaultCookiePolicy.set_ok(self, cookie, request):
                return False
            if i_dont_want_to_store_this_cookie(cookie):
                return False
            return True

`CookiePolicy` インターフェイスを実装するのに必要な機能に加えて、 このクラスではクッキーを受けとったり設定したりするドメインを 許可したり拒絶したりできるようになっています。ほかにも、 Netscape プロトコルのかなり緩い規則をややきつくするために、いくつかの 厳密性のスイッチがついています (いくつかの良性クッキーをブロックする危険性もありますが)。

ドメインのブラックリスト機能やホワイトリスト機能も提供されています (デフォルトではオフになっています)。 ブラックリストになく、(ホワイトリスト機能を使用している場合は) ホワイトリストにある ドメインのみがクッキーを設定したり返したりすることを許可されます。 コンストラクタの引数 blocked_domains、および `blocked_domains()` と `set_blocked_domains()` メソッドを 使ってください (allowed_domains に関しても同様の対応する引数とメソッドがあります)。 ホワイトリストを設定した場合は、それを `None` にすることで ホワイトリスト機能をオフにすることができます。

ブラックリストあるいはホワイトリスト中にあるドメインのうち、 ドット (.) で始まっていないものは、正確にそれと一致する ドメインのクッキーにしか適用されません。たとえば ブラックリスト中のエントリ `"example.com"` は、 `"example.com"` にはマッチしますが、`"www.example.com"` にはマッチしません。 一方ドット (.) で始まっているドメインは、より特化されたドメインともマッチします。 たとえば、`".example.com"` は、`"www.example.com"` と `"www.coyote.example.com"` の両方にマッチします (が、`"example.com"` 自身にはマッチしません)。IP アドレスは例外で、 つねに正確に一致する必要があります。たとえば、かりに blocked_domains が `"192.168.1.2"` と `".168.1.2"` を 含んでいたとして、192.168.1.2 はブロックされますが、 193.168.1.2 はブロックされません。

`DefaultCookiePolicy` は以下のような追加メソッドを実装しています:

`blocked_domains`( | )

  ブロックしているドメインのシーケンスを (タプルとして) 返します。

`set_blocked_domains`( | blocked_domains)

  ブロックするドメインを設定します。

`is_blocked`( | domain)

  domain がクッキーを授受しないブラックリストに載っているかどうかを返します。

`allowed_domains`( | )

  `None` あるいは明示的に許可されているドメインを (タプルとして) 返します。

`set_allowed_domains`( | allowed_domains)

  許可するドメイン、あるいは `None` を設定します。

`is_not_allowed`( | domain)

  domain がクッキーを授受するホワイトリストに載っているかどうかを返します。

`DefaultCookiePolicy` インスタンスは以下の属性をもっています。 これらはすべてコンストラクタから同じ名前の引数をつかって初期化することができ、 代入してもかまいません。

`rfc2109_as_netscape`
  Trueの場合、`CookieJar` のインスタンスに RFC 2109 クッキー (即ち Set-Cookie:ヘッダのVersion cookie属性の値が1のクッキー)を Netscapeクッキーへ、`Cookie` インスタンスのversion属性を0に設定する事で ダウングレードするように要求します。デフォルトの値は `None`で あり、この場合 RFC 2109 クッキーは RFC 2965 処理が無効に設定されている 場合に限りダウングレードされます。それ故に RFC 2109 クッキーはデフォルトでは ダウングレードされます。 バージョン 2.5 で 新たに追加 された仕様です。

一般的な厳密性のスイッチ:

`strict_domain`
  サイトに、 国別コードとトップレベルドメインだけからなるドメイン名 (`.co.uk`, `.gov.uk`, `.co.nz` など) を設定させないようにします。 これは完璧からはほど遠い実装であり、いつもうまくいくとは限りません!

RFC 2965 プロトコルの厳密性に関するスイッチ:

`strict_rfc2965_unverifiable`
  検証不可能なトランザクション (通常これはリダイレクトか、 別のサイトがホスティングしているイメージの読み込み要求です) に関する RFC 2965 の規則に従います。この値が偽の場合、検証可能性を基準にして クッキーがブロックされることは決してありません。

Netscape プロトコルの厳密性に関するスイッチ:

`strict_ns_unverifiable`
  検証不可能なトランザクションに関する RFC 2965 の規則を Netscape クッキーに 対しても適用します。

`strict_ns_domain`
  Netscape クッキーに対するドメインマッチングの規則をどの程度厳しくするかを 指示するフラグです。とりうる値については下の説明を見てください。

`strict_ns_set_initial_dollar`
  Set-Cookie: ヘッダで、`'$'` で始まる名前のクッキーを無視します。

`strict_ns_set_path`
  要求した URI にパスがマッチしないクッキの設定を禁止します。

`strict_ns_domain` はいくつかのフラグの集合です。 これはいくつかの値を or することで構成します (たとえば `DomainStrictNoDots|DomainStrictNonDomain` は両方のフラグが 設定されていることになります)。

`DomainStrictNoDots`
  クッキーを設定するさい、ホスト名のプレフィクスにドットが含まれるのを 禁止します (例: `www.foo.bar.com` は `.bar.com` のクッキーを設定することはできません、 なぜなら `www.foo` はドットを含んでいるからです)。

`DomainStrictNonDomain`
  `domain` クッキー属性を明示的に指定していないクッキーは、 そのクッキーを設定したドメインと同一のドメインだけに返されます (例: `example.com` からのクッキーに `domain` クッキー属性が ない場合、そのクッキーが `spam.example.com` に返されることはありません)。

`DomainRFC2965Match`
  クッキーを設定するさい、RFC 2965 の完全ドメインマッチングを要求します。

以下の属性は上記のフラグのうちもっともよく使われる組み合わせで、 便宜をはかるために提供されています。

`DomainLiberal`
  0 と同じです (つまり、上述の Netscape のドメイン厳密性フラグが すべてオフにされます)。

`DomainStrict`
  `DomainStrictNoDots|DomainStrictNonDomain` と同じです。