18.6.2 OpenerDirector オブジェクト

OpenerDirector インスタンスは以下のメソッドを持っています:

add_handler( handler)
handlerBaseHandler のインスタンスでなければ なりません。以下のメソッドを使った検索が行われ、URL を取り扱うことが 可能なハンドラの連鎖が追加されます (HTTP エラーは特別扱いされている ので注意してください)。

open( url[, data])
与えられた url (リクエストオブジェクトでも文字列でも かまいません) を開きます。オプションとして data を与えることが できます。 引数、返り値、および送出される例外は urlopen() と同じ です (urlopen() の場合、標準でインストールされている グローバルな OpenerDirectoropen() メソッドを 呼び出します) 。

error( proto[, arg[, ...]])
与えられたプロトコルにおけるエラーを処理します。このメソッドは 与えられたプロトコルにおける登録済みのエラーハンドラを (プロトコル固有の) 引数で呼び出します。 HTTP プロトコルは特殊な ケースで、特定のエラーハンドラを選び出すのに HTTP レスポンスコード を使います; ハンドラクラスの http_error_*() メソッドを 参照してください。

返り値および送出される例外は urlopen() と同じものです。

OpenerDirector オブジェクトは、以下の 3 つのステージに分けて URL を開きます:

各ステージで OpenerDirector オブジェクトのメソッドがどのような 順で呼び出されるかは、ハンドラインスタンスの並び方で決まります。

  1. protocol_request() 形式のメソッドを持つ 全てのハンドラに対してそのメソッドを呼び出し、リクエストの プリプロセスを行います。

  2. protocol_open() 形式のメソッドを持つ ハンドラを呼び出し、リクエストを処理します。 このステージは、ハンドラがNone でない値 (すなわち レスポンス) を返すか、例外 (通常は URLError) を送出した時点で 終了します。例外は伝播 (propagate) できます。

    実際には、上のアルゴリズムではまず default_open という名前の メソッドを呼び出します。このメソッドが全て None を返す場合、 同じアルゴリズムを繰り返して、今度は protocol_open() 形式のメソッドを試します。メソッドが全て None を返すと、 さらに同じアルゴリズムを繰り返して unknown_open() を呼び出します。

    これらのメソッドの実装には、親となる OpenerDirector インスタンスの .open().error() といったメソッド 呼び出しが入る場合があるので注意してください。

  3. protocol_response() 形式のメソッドを持つ 全てのハンドラに対してそのメソッドを呼び出し、リクエストの ポストプロセスを行います。

ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。