天天看點

huobiAPIPython代碼解析POSTapi整理

文章目錄

  • POST
    • URL編碼
    • 數字簽名
  • api整理

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整理

huobiAPIPython代碼解析POSTapi整理