请求中的 HMAC apisign headers 但 headers 必须是 str 错误?

HMAC apisign in a requests headers but headers must be str error?

    apikey = '$mykey'
    apisecret = '$mykeysecret'
    nonce = str(int(time.time() * 1000))
    uri = 'https://somewebsite.com/api/v1.5/account/getbalances?apikey='+apikey+'&nonce='+nonce
    sign = hmac.new(b'apisecret', b'uri', hashlib.sha512)
    response = requests.get(uri, headers={'apisign': sign}, timeout=10)
    print(json.dumps(response, sort_keys=True, indent=4))

 """ The following are the example provided by the website """
    # $ch = curl_init($uri);
    # curl_setopt($ch, CURLOPT_HTTPHEADER, array('apisign:'.$sign));
    # $execResult = curl_exec($ch);
    # $obj = json_decode($execResult);
    # url = "https://somewebsite.com/api/v1.5/account/getbalances?apikey=API_KEY"

经过 2 小时的研究,我无法解决这个问题。它现在说 headers 需要是 str。但是使用 str{'apisign': sign} 它说 str object 没有项目。

您正在将字典正确地传递给 headers 参数,但错误是说 sign 的值不是字符串。 sign 是一个 HMAC object,需要转换成字符串:

>>> print(sign)
<hmac.HMAC object at 0x03337950>

我会看一下调用 sign.digest() 看它是否 returns 您期望的字符串。如果是,那么您可以将 headers={'apisign': sign} 替换为 headers={'apisign': sign.digest()}.