Я использую команду requests.get () из пакета запросов, но получаю следующую ошибку, указывающую на то, что я считаю, что я не проверяю SSL-соединение должным образом.
requests.exceptions.SSLError : HTTPSConnectionPool (host = 'marketplace.spp.org', port = 443): Превышено максимальное количество повторных попыток с url: / file-browser-api / download / da-lmp-by-location? Path =% 2F2020% 2F08% 2FBy_Day% 2FDA-LMP-SL-202008020100.csv (Вызвано SSLError (SSLError (336265225, '[SSL] PEM lib (_ssl. c: 3524)'),))
Вот способы, которыми я пробовал использовать request.get (). Я пробовал их каждый по отдельности, но все они вернули одну и ту же ошибку.
url = 'https://marketplace.spp.org/file-browser-api/download/da-lmp-by-location?path=%2F{}%2F{:02}%2FBy_Day%2FDA-LMP-SL-{}{:02}{:02}0100.csv'.format(year, month, year, month, day)
r = requests.get(url)
r = requests.get(url, cert='spp_cert.crt')
r = requests.get(url, verify='spp_cert.crt')
r = requests.get(url, verify='/etc/ssl/certs/ca-certificates.crt')
Обратите внимание, что я получил сертификат spp_cert.crt, выполнив команду
echo | openssl s_client -servername marketplace.spp.org -connect marketplace.spp.org:443 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > spp_cert.crt
Я считаю расположение / etc / ssl / certs / ca-Certific.crt - это место, где находится мой пакет CA, когда я выполнил следующую команду из командной строки bash, чтобы выяснить это.
python3 -m certifi
Хочу отметить, что я использовал verify = False в качестве аргумента, но по мере того, как код развивается от одноразового использования к производственному, я больше не хочу игнорировать это предупреждение. Признаюсь, я немного запутался в том, как работают SSL-сертификаты и проверка, и это, вероятно, является источником моей проблемы.
Наконец, я хочу отметить, что мне удалось загрузить идентичный сертификат через Firefox, но заметил, что у него есть два варианта загрузки сертификата (PEM (cert) PEM (chain)), и у меня есть подозрение, что проблема в том, что мне нужно загрузить цепочку сертификатов, а не только один сертификат. Но я действительно не знаю, как это работает, если это вообще то, что мне нужно сделать, и если это то, что мне нужно сделать, как это сделать с помощью openssl . Спасибо!