В настоящее время я пишу плагин языка python для написанного мной компилятора, который автоматизирует http-вызовы для RESTful API. Мне удалось заставить работать логин/аутентификацию с использованием модулей сокета и ssl, но этот низкоуровневый подход, похоже, создает потенциальные проблемы с анализом ответа для получения токена аутентификации и секрета. Модуль запросов кажется популярным/эффективным, однако я не могу заставить его работать должным образом для моих конкретных потребностей аутентификации. Я использую хранилище доверия в виде файла .pem (содержащего только открытый ключ), который я преобразовал из моего файла .jks, используемого для аутентификации для подключаемого модуля Java. Сервер ожидает, что имя пользователя и пароль будут отправлены в теле запроса в формате json. Вот код, который я пытался использовать:
#Server and login data
...
host = 'localhost'
port = 8443
pem_file = "C:\\Users\\aharasta\\pycert.pem"
#Digest password with MD5 algorithm
m = hashlib.md5()
m.update(password)
encrypted_password = m.hexdigest()
url = <url>
data = {'userid': user_name, 'password': encrypted_password}
json_data = json.dumps(data)
headers = {'Content-type': 'application/json', 'Accept': 'text/plain', 'Content \
Length': len(json_data)}
r = requests.post(url, headers = headers, data = json_data, cert = pem_file)
print(r)
После выполнения этот код вызовет ошибку SSL с сообщением «Сбой проверки сертификата». Если я добавлю параметр verify = False
или verify = pem_file
, я получу ответ 404 от сервера. Я также должен отметить, что когда я запускаю сервер в режиме отладки и выполняю запрос (с одним из параметров проверки), он никогда не попадает в методы аутентификации сервера или какие-либо методы в этом отношении. Мы будем очень признательны за любую информацию или помощь в этом вопросе!