为个人项目编写机器人,而Bittrex api拒绝验证我的内容散列。我已经尝试了我能想到的所有方法和类似问题的所有建议,但到目前为止都没有奏效。尝试散列'None',尝试一个空字符串,尝试货币符号,尝试整个uri,尝试命令& balance,尝试其他一些同样不起作用的操作。对请求重新格式化了几次(字节/字符串/字典),仍然没有结果。
文档说要散列请求主体(在通过api进行事务的类似问题中,这似乎与有效负载同义),但这是一个简单的get/chcek balance请求,没有有效负载。
问题是,当我运行它时,我得到了一个'BITTREX错误:无效的内容散列‘响应。
任何帮助都会非常感谢,这看起来像是一个简单的问题,但它让我沮丧得要命。我是python的新手,但机器人的其余部分运行得很好,这让我无法将其连接到我的帐户上感到格外沮丧:/
import hashlib
import hmac
import json
import os
import time
import requests
import sys
# Base Variables
Base_Url = 'https://api.bittrex.com/v3'
APIkey = os.environ.get('B_Key')
secret = os.environ.get('S_B_Key')
timestamp = str(int(time.time() * 1000))
command = 'balances'
method = 'GET'
currency = 'USD'
uri = Base_Url + '/' + command + '/' + currency
payload = ''
print(payload) # Payload Check
# Hashes Payload
content = json.dumps(payload, separators=(',', ':'))
content_hash = hashlib.sha512(bytes(json.dumps(content), "utf-8")).hexdigest()
print(content_hash)
# Presign
presign = (timestamp + uri + method + str(content_hash) + '')
print(presign)
# Create Signature
message = f'{timestamp}{uri}{method}{content_hash}'
sign = hmac.new(secret.encode('utf-8'), message.encode('utf-8'),
hashlib.sha512).hexdigest()
print(sign)
headers = {
'Api-Key': APIkey,
'Api-Timestamp': timestamp,
'Api-Signature': sign,
'Api-Content-Hash': content_hash
}
print(headers)
req = requests.get(uri, json=payload, headers=headers)
tracker_1 = "Tracker 1: Response =" + str(req)
print(tracker_1)
res = req.json()
if req.ok is False:
print('bullshit error #1')
print("Bittex response: %s" % res['code'], file=sys.stderr)
发布于 2021-05-09 10:40:21
我可以看到两个主要问题:
对于散列(使用json.dumps
,然后使用bytes
)和请求(使用json=payload
参数为request.get
),您将分别对有效载荷进行序列化/编码。您无法知道请求库将如何格式化您的数据,即使一个字节不同,您也会得到不同的散列。最好先将数据转换为字节,然后对散列和请求正文使用相同的字节。
API请求通常没有正文(有关更多详细信息,请参阅this answer ),因此可能是忽略了您发送的有效负载。你应该检查API文档,看看你是否真的需要发送带有GET请求的请求体。
https://stackoverflow.com/questions/67453583
复制相似问题