首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >(Python) Bittrex API v3不断返回无效的内容散列

(Python) Bittrex API v3不断返回无效的内容散列
EN

Stack Overflow用户
提问于 2021-05-09 09:32:03
回答 1查看 76关注 0票数 0

为个人项目编写机器人,而Bittrex api拒绝验证我的内容散列。我已经尝试了我能想到的所有方法和类似问题的所有建议,但到目前为止都没有奏效。尝试散列'None',尝试一个空字符串,尝试货币符号,尝试整个uri,尝试命令& balance,尝试其他一些同样不起作用的操作。对请求重新格式化了几次(字节/字符串/字典),仍然没有结果。

文档说要散列请求主体(在通过api进行事务的类似问题中,这似乎与有效负载同义),但这是一个简单的get/chcek balance请求,没有有效负载。

问题是,当我运行它时,我得到了一个'BITTREX错误:无效的内容散列‘响应。

任何帮助都会非常感谢,这看起来像是一个简单的问题,但它让我沮丧得要命。我是python的新手,但机器人的其余部分运行得很好,这让我无法将其连接到我的帐户上感到格外沮丧:/

代码语言:javascript
运行
复制
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)
EN

回答 1

Stack Overflow用户

发布于 2021-05-09 10:40:21

我可以看到两个主要问题:

对于散列(使用json.dumps,然后使用bytes)和请求(使用json=payload参数为request.get),您将分别对有效载荷进行序列化/编码。您无法知道请求库将如何格式化您的数据,即使一个字节不同,您也会得到不同的散列。最好先将数据转换为字节,然后对散列和请求正文使用相同的字节。

API请求通常没有正文(有关更多详细信息,请参阅this answer ),因此可能是忽略了您发送的有效负载。你应该检查API文档,看看你是否真的需要发送带有GET请求的请求体。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67453583

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档