def request(self, method, url=None, **kwargs):
url = self._compose_url(url, kwargs)<EOL>kwargs.setdefault('<STR_LIT>', self._timeout)<EOL>d = self._client.request(method, url, reactor=self._reactor, **kwargs)<EOL>d.addCallback(self._log_request_response, method, url, kwargs)<EOL>d.addErrback(self._log_request_error, url)<EOL>return d<EOL>
Perform a request.

:param: method:
    The HTTP method to use (example is `GET`).
:param: url:
    The URL to use. The default value is the URL this client was
    created with (`self.url`) (example is `http://localhost:8080`)
:param: kwargs:
    Any other parameters that will be passed to `treq.request`, for
    example headers. Or any URL parameters to override, for example
    path, query or fragment.