Python 3.7 TypeError: требуется байтоподобный объект, а не 'str' - PullRequest
0 голосов
/ 15 марта 2020

У меня есть эти две строки:

client_id = "id_str"
client_secret = "secret_str"

И я должен передать их так:

def getToken(code, client_id, client_secret, redirect_uri):
    body = {
        "grant_type": 'authorization_code',
        "code" : code,
        "redirect_uri": redirect_uri,
        "client_id": client_id,
        "client_secret": client_secret
    }

    encoded = base64.b64encode("{}:{}".format(client_id, client_secret))
    headers = {"Content-Type" : HEADER, "Authorization" : "Basic {}".format(encoded)} 

    post = requests.post(SPOTIFY_URL_TOKEN, params=body, headers=headers)
    return handleToken(json.loads(post.text))

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

    encoded = base64.b64encode("{}:{}".format(client_id, client_secret))
  File "/usr/local/lib/python3.7/base64.py", line 58, in b64encode
    encoded = binascii.b2a_base64(s, newline=False)
TypeError: a bytes-like object is required, not 'str'

Как исправить это кодирование / форматирование для Python 3.7?

ps: я не вижу ответа адресации форматирования {}, а также кодировки.

1 Ответ

0 голосов
/ 15 марта 2020

Измените строку

encoded = base64.b64encode("{}:{}".format(client_id, client_secret))

на

encoded = base64.b64encode("{}:{}".format(client_id, client_secret).encode())

В соответствии с документацией :

base64.b64encode (s) , altchars = Нет)

Кодировать байтообразные объекты с помощью Base64 и возвращать закодированные байты.

Относительно вашего возражения:

связанный ответ не касается форматирования

На самом деле ваша проблема не имеет ничего общего с форматированием, потому что format() просто возвращает строку, но b64encode требует объект, похожий на байты, а не строку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...