Python TypeError - Ожидаемые байты, но получили 'str' при попытке создать подпись - PullRequest
0 голосов
/ 13 октября 2018

Я пытаюсь создать подпись для вызова API - для которого в документации содержатся следующие инструкции:

timestamp = str(int(time.time()))
    message = timestamp + request.method + request.path_url + (request.body or '')
    signature = hmac.new(self.secret_key, message, hashlib.sha256).hexdigest()

Однако я всегда получаю эту ошибку:

Exception has occurred: TypeError key: expected bytes or bytearray, but got 'str' 

File "/Users/dylanbrandonuom/BouncePay_Code/src/coinbase/Coinbase_API.py", line 26, in __call__
signature = hmac.new(self.secret_key, message, hashlib.sha256).hexdigest()

File "/Users/dylanbrandonuom/BouncePay_Code/src/coinbase/Coinbase_API.py", line 40, in <module>
r = requests.get(api_url + 'user', auth=auth)

Я попытался изменить

signature = hmac.new(self.secret_key, message, hashlib.sha256).hexdigest()

на

signature = hmac.new(b'self.secret_key', message, hashlib.sha256).hexdigest()

, но безуспешно.

Вот вторая часть ошибки:

api_url = 'https://api.coinbase.com/v2/'
auth = CoinbaseWalletAuth(API_KEY, API_SECRET)
r = requests.get(api_url + 'user', auth=auth)

Кто-нибудь может сообщить мне, почему это происходит?

Я думаю, что это может быть переменная сообщения с request.method и request.path_url, но я не уверен.

1 Ответ

0 голосов
/ 13 октября 2018

Сообщение об ошибке, которое вы видите, говорит о том, что вы передаете (юникод) строку в качестве аргумента key hmac.new(), но ожидаются байты (или байты).

Этоозначает, что self.secret_key является строкой, а не байтовым объектом.В вашем вопросе нет указания на то, где в вашем коде присваивается self.secret_key, но при условии, что это где-то константа, это может выглядеть так:

SECRET = 'some secret key'

Если это так, изменение этой строки на что-товроде

SECRET = b'some secret key'

… должно работать.Если вы назначаете self.secret_key другим способом, невозможно узнать, как решить проблему, не увидев этот код.

...