我知道這聽起來像我正在跳槍問這個。然而,我幾個小時以來一直在抨擊我的頭腦。我試圖從BTC-e
得到響應,我有一個工作python2版本,只是在python3失敗。我嘗試自動轉換它,查找包名稱更改等只是死在我身上。這裏是工作python2樣本:(不是我的代碼)HMAC的Python 2到3轉換
#! /usr/bin/python
import httplib
import urllib
import json
import hashlib
import hmac
from auth import Ekey, Esecret
# Replace these with your own API key data
BTC_api_key = Ekey
BTC_api_secret = Esecret
# Come up with your own method for choosing an incrementing nonce
def generate_nonce(length=8):
"""Generate pseudorandom number."""
return ''.join([str(random.randint(0, 9)) for i in range(length)])
nonce = generate_nonce()
# method name and nonce go into the POST parameters
params = {"method":"getInfo",
"nonce": nonce}
params = urllib.urlencode(params)
# Hash the params string to produce the Sign header value
H = hmac.new(BTC_api_secret, digestmod=hashlib.sha512)
H.update(params)
sign = H.hexdigest()
headers = {"Content-type": "application/x-www-form-urlencoded",
"Key":BTC_api_key,
"Sign":sign}
conn = httplib.HTTPSConnection("btc-e.com")
conn.request("POST", "/tapi", params, headers)
response = conn.getresponse()
print response.status, response.reason
print json.load(response)
conn.close()
然後不幸的堆棧溢出藥汁我從什麼地方,它返回無效的簽名黃牛。
#! /usr/bin/python3
from time import time
import urllib.parse
import hashlib
import hmac
import requests
import json
APIKey = b'key-key-key'
secret = b'secret'
url = "https://btc-e.com/tapi"
payload = {
'method': 'getInfo',
'nonce': int(time() * 1000),
}
paybytes = urllib.parse.urlencode(payload).encode()
print(paybytes)
sign = hmac.new(secret, paybytes, digestmod=hashlib.sha512).hexdigest()
print(sign)
headers = {
"Content-type": "application/x-www-form-urlencoded",
'Key':APIKey,
'Sign': sign
}
r = requests.post(url, headers=headers, data=paybytes)
result = r.json()
print(result)
他/她們爲什麼不同?對於api文檔,我試圖使用go here。
大得多你可能會得到下投票,因爲你還沒有提供[MCVE],這是我們的調試能力至關重要的碼。請更新您的問題以包含一個「爲什麼我的代碼不工作」需要**明確的問題陳述**。你可能想看看[問]。 –
@JasonBasanese:你的問題並不壞,我不明白爲什麼它被低估。如果它需要私人API密鑰,那麼提供一個工作示例有點困難。 – Blender
我可能會對它進行編輯以使明日更有意義。 –