##
11.2.1 URLopener Objects

`URLopener` and `FancyURLopener` objects have the following methodsL

`open` (fullurl[, data])
  Open fullurl using the appropriate protocol. This method sets up cache and proxy information, then calls the appropriate open method with its input arguments. If the scheme is not recognized, `open_unknown()` is called. The data argument has the same meaning as the data argument of `urlopen()`.

`open_unknown` (fullurl[, data])
  Overridable interface to open unknown URL types.

`retrieve` (url[, filename[, reporthook]])
  Retrieves the contents of url and places it in filename. The return value is a tuple consisting of a local filename and either a `mimetools.Message` object containing the response headers (for remote URLs) or None (for local URLs). The caller must then open and read the contents of filename. If filename is not given and the URL refers to a local file, the input filename is returned. If the URL is non-local and filename is not given, the filename is the output of `tempfile.mktemp()` with a suffix that matches the suffix of the last path component of the input URL. If reporthook is given, it must be a function accepting three numeric parameters. It will be called after each chunk of data is read from the network. reporthook is ignored for local URLs.