Huobi REST API-签名请求-验证失败

Huobi REST API-签名请求-验证失败,rest,sha256,hmac,signing,Rest,Sha256,Hmac,Signing,我对Huobi(cryptoexchange)REST API请求签名有问题。规则是明确的(例如)。“v1/accounts/accounts”示例-无参数获取: URL参数: AccessKeyId=Dby2SF5T7-d5829459-bf3aee27-67f62&SignatureMethod=HmacSHA256&SignatureReversion=2&Timestamp=2020-11-11T12%3A17%3A57 签署前文本: GET\napi.huobi.pro\n/v1/a

我对Huobi(cryptoexchange)REST API请求签名有问题。规则是明确的(例如)。“v1/accounts/accounts”示例-无参数获取:

  • URL参数:
    AccessKeyId=Dby2SF5T7-d5829459-bf3aee27-67f62&SignatureMethod=HmacSHA256&SignatureReversion=2&Timestamp=2020-11-11T12%3A17%3A57

  • 签署前文本:
    GET\napi.huobi.pro\n/v1/account/accounts\nAccessKeyId=Dby2SF5T7-d5829459-bf3aee27-67f62&SignatureMethod=HmacSHA256&SignatureReversion=2&Timestamp=2020-11-11T12%3A17%3A57

  • Hmac SHA256使用私钥对预签名文本进行签名(已验证):
    auZl70i2qsUb7+u9yyey1bwzlypwim7qf1pbajcvfc=

  • 要获取的URL:
    https://api.huobi.pro/v1/account/accounts?AccessKeyId=dbye2sf5t7-d5829459-BF3AE27-67f62&SignatureMethod=HmacSHA256&SignatureReversion=2&Timestamp=2020-11-11T12%3A17%3A57&Signature=auZl70i2qsUb7%2BU9YYEEY1BWZLYPWM7QF1PBAJCVFC%3D

  • 答复是:

    {“状态”:“错误”,“错误代码”:“api签名无效”,“错误消息”:“签名无效:验证失败”[校验失败]","数据“:null}


    我做错了什么?我已经搜索了许多代码示例,但没有发现错误…

    我在同一个端点上遇到了这个问题。我不确定您用于签名请求的代码。这是我的:

    class HuobiAuth(requests.auth.AuthBase):
        def __init__(self, api_key: str, secret_key: str) -> None:
            self.api_key: str = api_key
            self.secret_key: str = secret_key
    
        @staticmethod
        def create_sign(p_params: Dict, method: str, host_url: str, request_path: str, secret_key: str):
            sorted_params = sorted(p_params.items(), key=lambda d: d[0], reverse=False)
            # encode_params = urllib.urlencode(sorted_params)
            encode_params = urllib.parse.urlencode(sorted_params)
            payload = [method, host_url, request_path, encode_params]
            payload = '\n'.join(payload)
            payload = payload.encode(encoding='UTF8')
            secret_key = secret_key.encode(encoding='UTF8')
            digest = hmac.new(secret_key, payload, digestmod=hashlib.sha256).digest()
            signature = base64.b64encode(digest)
            signature = signature.decode()
            return signature
    
        def __call__(self, request: requests.PreparedRequest) -> requests.PreparedRequest:
            timestamp = datetime.datetime.utcnow().strftime('%Y-%m-%dT%H:%M:%S')
            params_to_sign = {'AccessKeyId': self.api_key,
                              'SignatureMethod': 'HmacSHA256',
                              'SignatureVersion': '2',
                              'Timestamp': timestamp}
            host_name = urllib.parse.urlparse(request.url).hostname.lower()
            params_to_sign['Signature'] = self.create_sign(params_to_sign, request.method, host_name, request.path_url, self.secret_key)
            request.url += '?' + urllib.parse.urlencode(params_to_sign)
            return request
    
    我最初的问题是,我没有使用
    request.method
    ,而是使用了一个硬编码的“POST”,我一定是从原始来源复制的

    用法示例:

    requests.post(url, json=your_data, auth=HuobiAuth(key, secret))
    

    你有没有找到解决这个问题的方法?我也有一个类似的问题。事实上,有时候它会起作用,而有时候它不会,我找不到任何押韵或原因来解释这种不稳定的行为。