def send(self, request, headers=None, content=None, **kwargs):
        """Prepare and send request object according to configuration.

        :param ClientRequest request: The request object to be sent.
        :param dict headers: Any headers to add to the request.
        :param content: Any body data to add to the request.
        :param config: Any specific config overrides
        """
        # "content" and "headers" are deprecated, only old SDK
        if headers:
            request.headers.update(headers)
        if not request.files and request.data is None and content is not None:
            request.add_content(content)
        # End of deprecation

        response = None
        kwargs.setdefault('stream', True)
        try:
            pipeline_response = self.config.pipeline.run(request, **kwargs)
            # There is too much thing that expects this method to return a "requests.Response"
            # to break it in a compatible release.
            # Also, to be pragmatic in the "sync" world "requests" rules anyway.
            # However, attach the Universal HTTP response
            # to get the streaming generator.
            response = pipeline_response.http_response.internal_response
            response._universal_http_response = pipeline_response.http_response
            response.context = pipeline_response.context
            return response
        finally:
            self._close_local_session_if_necessary(response, kwargs['stream'])
Prepare and send request object according to configuration.

        :param ClientRequest request: The request object to be sent.
        :param dict headers: Any headers to add to the request.
        :param content: Any body data to add to the request.
        :param config: Any specific config overrides