2017-04-18 13 views
0

は、私は、Pythonに非常に新しいですし、使用してバージョン3.6.1のPython 3.6.1:エラーurllib.parse.urlencode()

私は私がPythonの3.6.1 POSTリクエストのコードを書くことができます願ってエンコードされた場合でも、 HMAC-SHA512をpoloniexの取引APIに使用しましたが、このエラーが発生しました。

私が得る答えのほとんどは、私が望むものではないPython 2からです。助けてください。最初https://poloniex.com/support/api/

私のpythonシェルログ:ここ

がpoloniexドキュメントです

{'command': 'returnBalances', 'nonce': 1492523610} 
command=returnBalances&nonce=1492523610 
Traceback (most recent call last): 
    File "C:/Users/draft/Desktop/test3.py", line 21, in <module> 
    signing = hmac.new(secret, post_data, hashlib.sha512).hexdigest() 
    File "C:\Users\draft\AppData\Local\Programs\Python\Python36-32\lib\hmac.py", line 144, in new 
    return HMAC(key, msg, digestmod) 
    File "C:\Users\draft\AppData\Local\Programs\Python\Python36-32\lib\hmac.py", line 84, in __init__ 
    self.update(msg) 
    File "C:\Users\draft\AppData\Local\Programs\Python\Python36-32\lib\hmac.py", line 93, in update 
    self.inner.update(msg) 
TypeError: Unicode-objects must be encoded before hashing 

次は私の完全なコードです:

import urllib.request 
import urllib.parse 
import hmac 
import hashlib 
import time 
import json 

t = int(time.time()) 
secret = b'<secret>' 
headers = { 'Key' : '<api key>', 
      'Sign': ''} 
url = 'https://poloniex.com/tradingApi' 
req={} 

req['command'] = 'returnBalances' 
req['nonce'] = int(time.time()) 
#print (req) 

post_data = urllib.parse.urlencode(req) 
#print (post_data) 
signing = hmac.new(secret, post_data, hashlib.sha512).hexdigest() 
#print (signing) 
headers['Sign'] = signing 

ret = urllib.request.Request(url, data, headers) 
#print (ret) 


ret = urllib.request.urlopen(ret) 
a = json.loads(ret.read()) 
#print (a) 

は誰が正しい方向に私を導くことができます願っています。どうもありがとう。

答えて

0

私はあなただけで交換する必要があると思う:

post_data = urllib.parse.urlencode(REQ)

によってpost_data = str.encode(urllib.parse .urlencode(req))

関連する問題