api - 对 VALR 的经过身份验证的 api 调用 - Python 3.8
问题描述
我正在尝试对 VALR 加密交换进行经过身份验证的 api 调用,作为实现自动交易的第一步。他们提供了大部分代码,所以我认为即使是非编码技术人员也很容易。下面的代码确实使用为测试提供的 API Secret 创建了正确的 HMAC SHA512 签名,但我在将这个结果传递给下一部分代码以请求余额时遇到了问题(从第 17 行开始)。如果我将结果/显示的“签名”和“时间戳”(在运行代码之后)剪切并粘贴回代码中,它实际上可以工作。那么我需要进行哪些更改才能使代码自动获取签名和时间戳。用户定义的函数似乎使所有参数对代码的其余部分“保密”,尤其是在使用 return 之后。
import time
import hashlib
import hmac
def sign_request( api_key_secret,timestamp, verb,path,body=""):
payload = "{}{}{}{}".format(timestamp, verb.upper(), path, body)
message = bytearray(payload, 'utf-8')
signature = hmac.new(bytearray(api_key_secret, 'utf-8'), message, digestmod=hashlib.sha512).hexdigest()
print("Signature=",signature)
print ("Timestamp",timestamp)
return signature
sign_request( verb = "GET", timestamp = int(time.time()*1000),path="/v1/account/balances",api_key_secret="4961b74efac86b25cce8fbe4c9811c4c7a787b7a5996660afcc2e287ad864363" )
import requests
url = "https://api.valr.com/v1/account/balances"
payload = {}
headers = {
'X-VALR-API-KEY': '2589fb273e86aeee10bac1445232aa302feb37e27d32c1c599abc3757599139e',
'X-VALR-SIGNATURE': 'signature',
'X-VALR-TIMESTAMP': 'timestamp'
}
response = requests.request("GET", url, headers=headers, data = payload)
print(response.text.encode('utf8'))
解决方案
好吧,经过一番深思熟虑,我决定改用全局变量。hmac 仍然运行良好,并给了我一个签名。然后我删除了签名和时间戳周围的引号,并意识到它们都是整数。然后我能够将该签名和时间戳转换为字符串,并且一切都开始正常工作。也许其他人会利用这一点。如果要发出 POST 请求,请记住在 {body} 语句中的任何内容周围加上单引号以使其成为字符串。
推荐阅读
- python-3.x - 模块 '
' 没有属性 '__path__' - python - 在 Windows 中更新 pip 时出现环境错误
- coordinates - 使用 aicspylibczi 打开 .czi 文件(蔡司显微镜文件)平铺时出现问题
- mongodb - 如何在 MongoDB 中嵌入的对象数组中的每个对象内的字段之间复制值?
- python-3.x - TypeError: __init__() 得到了一个意外的关键字参数“平均”
- jquery - 错误类型错误:无法设置未定义的属性“el”
- python - 将动态 tkinter 变量插入函数参数
- flutter - 由于图片下方的问题,无法构建插件清晰
- javascript - 获取与选中复选框关联的所有 td 名称并显示在 html 输入字段中
- google-bigquery - 大查询如何用上一行的值填充单元格值