def METHOD_NAME(self, method, url, **kwargs):
    stream = kwargs.pop('stream', self._http.stream)
    prepped = requests.Request(method, self.API_BASE_URL + url, **kwargs).prepare()
    if self.app_key and self.secret_key:
        timestamp = str(round(time() * 1000))
        nonce = str(uuid1())
        signature = b64encode(HMAC(self.secret_key.encode('ascii'), b'\n'.join([
            timestamp.encode('ascii'),
            nonce.encode('ascii'),
            self.app_key.encode('ascii'),
            prepped.path_url.encode('ascii'),
            prepped.body if kwargs.get('json') else b'',
            urlencode(sorted(kwargs['data'].items()), quote_via=quote, safe='-._~').encode('ascii')
            if kwargs.get('data') and isinstance(kwargs['data'], dict) else b'',
        ]), 'sha1').digest()).decode('ascii')
        prepped.headers.update({
            'TIMESTAMP': timestamp,
            'NONCE': nonce,
            'APP_KEY': self.app_key,
            'SIGNATURE': signature,
        })
    try:
        response = self._http.send(prepped, stream=stream)
    except Exception as e:
        response = {
            'retcode': 100,
            'retmsg': str(e),
        }
        if 'connection refused' in response['retmsg'].lower():
            response['retmsg'] = 'Connection refused, Please check if the fate flow service is started'
        else:
            exc_type, exc_value, exc_traceback_obj = sys.exc_info()
            response['traceback'] = traceback.format_exception(exc_type, exc_value, exc_traceback_obj)
    return response