Я работаю с API ringCentral и пытаюсь получить токен аутентификации, используя механизм пароля, используя python 3. Раньше я делал это с python 2, и он все еще работает нормально. Я использовал метод urllib.urlencode () для URL-кодирования параметров запроса, как требуется в API do c. Эквивалент этого метода в python 3 - urllib.parse.urlencode (), но я получаю ошибку ниже при выполнении в python 3.
{"error": "invalid_request", "errors": [{"errorCode": "OAU-156", "message":
"Basic authentication header is missing or malformed"}], "error_description":
"Basic authentication header is missing or malformed"}
Я даже распечатал полученную строку из urlencode метод в обоих случаях и он одинаков. Я не понимаю, в чем тут проблема? Есть идеи? Я не могу найти никакой информации с этим кодом ошибки.
Python 3 код:
import urllib.parse
import json
import requests
basic="%s:%s" % ("<my cllient id>","<my cllient secret>")
auth_header = {
"Content-Type": "application/x-www-form-urlencoded",
"Accept": "application/json",
"Authorization": "Basic "+ str(base64.b64encode(basic.encode()))
}
body = urllib.parse.urlencode({
'grant_type': 'password',
'username': "<my number>",
'password': "<my password>"
})
auth_request=requests.request("POST","https://platform.devtest.ringcentral.com/restapi/oauth/token",headers=auth_header,data=body)
print(json.dumps(auth_request.json()))
Python 2 код (рабочий):
import urllib
import json
import requests
basic="%s:%s" % ("<my cllient id>","<my cllient secret>")
auth_header = {
"Content-Type": "application/x-www-form-urlencoded",
"Accept": "application/json",
"Authorization": "Basic "+ str(base64.b64encode(basic.encode()))
}
body = urllib.urlencode({
'grant_type': 'password',
'username': "<my number>",
'password': "<my password>"
})
auth_request=requests.request("POST","https://platform.devtest.ringcentral.com/restapi/oauth/token",headers=auth_header,data=body)
print(json.dumps(auth_request.json()))