2017-05-26 48 views
-1

我知道這聽起來像我正在跳槍問這個。然而,我幾個小時以來一直在抨擊我的頭腦。我試圖從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

+0

大得多你可能會得到下投票,因爲你還沒有提供[MCVE],這是我們的調試能力至關重要的碼。請更新您的問題以包含一個「爲什麼我的代碼不工作」需要**明確的問題陳述**。你可能想看看[問]。 –

+0

@JasonBasanese:你的問題並不壞,我不明白爲什麼它被低估。如果它需要私人API密鑰,那麼提供一個工作示例有點困難。 – Blender

+0

我可能會對它進行編輯以使明日更有意義。 –

回答

3

您的隨機數太大。從該網站的API docs您鏈接到:

最小的隨機數值 - 1,最大 - 4294967294

當前時間戳是1495778924773,比4294967294

+0

謝謝,我現在就試試。 –

+1

就是這樣......它總是那些小東西。 –