API неправильно интерпретирует пароль с помощью специальных символов - PullRequest
1 голос
/ 09 октября 2019

Я использую код Python для подключения к API для получения информации в формате JSON. Пароль используется для аутентификации в API. До сих пор аутентификация работала нормально, но так как я изменил свой пароль на пароль со специальными символами, все пошло не так. Я полагаю, что пароль плохо обрабатывается ни API, ни кодом, который я использую.

Этот фрагмент кода может вызвать ошибки:

        # Create connection and request header.
        # This class does not perform any verification of the server`s certificate.
        conn = HTTPSConnection(ADDRESS)
        auth_header = 'Basic %s' % (':'.join([USER_NAME, PASSWORD]).encode('Base64').strip('\r\n'))
        request_header = {'Authorization':auth_header.decode(),
                        'Content-Type': content_type}

Ошибка, которую я получаюпосле выполнения кода следующее:

    response = self.perform_request(log, 'GET', 'network', params=query)
  File "/usr/local/lib/python2.7/query_code.py", line 103, in perform_request
    auth_header = 'Basic %s' % str(":".join([USER_NAME, PASSWORD]).encode('Base64').strip('\r\n'))
TypeError: sequence item 1: expected string or Unicode, NoneType found

У меня должно было быть успешное соединение с API с кодом 200 и результатами, возвращенными в формате json.

У меня проблемы с определением источника происхождениявсе это, и хотел бы узнать ваше мнение о том, что я думаю, и как это решить.

1 Ответ

1 голос
/ 09 октября 2019

Попробуйте вместо этого:

def basic_token(key, secret):
    return base64.b64encode(bytes(f'{key}:{secret}', 'utf-8')).decode('utf-8')

auth_header = f'basic {basic_token(USERNAME, PASSWORD)}'

Если вы используете версию Python <3.6, вам нужно будет использовать <code>.format вместо f-strings:

def basic_token(key, secret):
    return base64.b64encode(bytes('{}:{}'.format(key, secret), 'utf-8')).decode('utf-8')

auth_header = 'basic {}'.format(basic_token(USERNAME, PASSWORD))
...