11.5.2 OpenerDirector Objects

OpenerDirector instances have the following methods:

add_handler( handler)
handler should be an instance of BaseHandler. The following methods are searched, and added to the possible chains (note that HTTP errors are a special case).

open( url[, data])
Open the given url (which can be a request object or a string), optionally passing the given data. Arguments, return values and exceptions raised are the same as those of urlopen() (which simply calls the open() method on the currently installed global OpenerDirector).

error( proto[, arg[, ...]])
Handle an error of the given protocol. This will call the registered error handlers for the given protocol with the given arguments (which are protocol specific). The HTTP protocol is a special case which uses the HTTP response code to determine the specific error handler; refer to the http_error_*() methods of the handler classes.

Return values and exceptions raised are the same as those of urlopen().

OpenerDirector objects open URLs in three stages:

The order in which these methods are called within each stage is determined by sorting the handler instances.

  1. Every handler with a method named like protocol_request() has that method called to pre-process the request.

  2. Handlers with a method named like protocol_open() are called to handle the request. This stage ends when a handler either returns a non-None value (ie. a response), or raises an exception (usually URLError). Exceptions are allowed to propagate.

    In fact, the above algorithm is first tried for methods named default_open. If all such methods return None, the algorithm is repeated for methods named like protocol_open(). If all such methods return None, the algorithm is repeated for methods named unknown_open().

    Note that the implementation of these methods may involve calls of the parent OpenerDirector instance's .open() and .error() methods.

  3. Every handler with a method named like protocol_response() has that method called to post-process the response.

See About this document... for information on suggesting changes.