Есть ли разница между методом urlencode в python 2 и python 3 - PullRequest
0 голосов
/ 06 мая 2020

Я работаю с 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()))

1 Ответ

1 голос
/ 06 мая 2020

Вам необходимо ввести здесь свой код, чтобы мы могли устранить проблему.
А пока не могли бы вы проверить RingCentral, используя Python 2 и 3, вы можете шаг за шагом узнать, как получить доступ к службам RingCentral, используя Python собственный API здесь: https://ringcentral-tutorials.github.io/call-ringcentral-apis-native-python-demo/?distinctId=171e1c5b614e8-078e90c97b438a-1d346655-fa000-171e1c5b615fa#0

Вы можете узнать, как он получает доступ к коду состояния, определяет и обрабатывает токены и обрабатывает авторизацию

...