huobiAPIPython代码解析

POST

与行情查询这个简单的html网页请求相比, 实盘交易包含了至关重要的身份验证环节, 这是通过修改request的url来实现的

URL编码

URL中常见%20这种意义不明的数字, 其实际上就是普通字符串经URL转换得到的. URL只能使用英文字母、阿拉伯数字和某些标点符号,不能使用其他文字和符号.

import urllib
#以下将在连接参数的同时将其转化为URL编码
urllib.parse.urlencode(params)

数字签名

制造数字签名需要遵循官方格式

host = 'api.hbdm.com'
method= '/api/v1/contract_order'
# 随方法不同, 可能会添加新的参数
params0 = {'AccessKeyId':accessid, 
		'SignatureMethod':HmacSHA256,
		'SignatureVersion':2,
		'Timestamp':datetime.datetime.utcnow().strftime('%Y-%m-%dT%H:%M:%S')}
#注意是utcnow()不是now(), 否则会报错
sorted_params = sorted(params0.items(), key=lambda d: d[0], reverse=False)  
paramurl = urllib.parse.urlencode(sorted_params)
signatureraw = '\n'.join(['POST',host,method,paramurl])

之后是密码学过程

import base64
import hmac
import hashlib
digest = hmac.new(secret_key.encode(encoding='UTF8'), 
			signatureraw.encode(encoding='UTF8'),
			 digestmod=hashlib.sha256).digest()
signature = base64.b64encode(digest)
signature = signature.decode()

加入签名, 生成目标URL

sorted_params.append(('Signature',signature))
# 在requests中https://不可省略
URL = 'https://' + host + method + '?' + urllib.parse.urlencode(sorted_params)
import requests
response = requests.post(url=URL, timeout=2)
result = response.json()
print(result)

这时已经能返回正常信息了

需要注意的是, params的变动虽然会改变数字签名, 但并不会影响服务器端的识别
增加无法识别的param项不会影响返回结果

api整理

在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值