'Make a request using :meth:`urlopen` with the appropriate encoding of
``fields`` based on the ``method`` used.
This is a convenience method that requires the least amount of manual
effort. It can be used in most situations, while still having the
option to drop down to more specific methods when necessary, such as
:meth:`request_encode_url`, :meth:`request_encode_body`,
or even the lowest level :meth:`urlopen`.'

def request(self, method, url, fields=None, headers=None, **urlopen_kw):

    method = method.upper()
    if (method in self._encode_url_methods):
        return self.request_encode_url(method, url, fields=fields, headers=headers, **urlopen_kw)
    else:
        return self.request_encode_body(method, url, fields=fields, headers=headers, **urlopen_kw)
