Однако код nim работает отлично, поэтому с кодом или настройкой python должно быть что-то не так.
На самом деле, ваш код или настройки Python меньше виноваты, но вместо этого nim
код или лучше значения по умолчанию в библиотеке httpclient
.В документации для nim
видно, что httpclient.request
использует контекст SSL, возвращаемый getDefaultSSL
по умолчанию, который согласно этот код создает контекст, который не проверяет сертификат:
proc getDefaultSSL(): SSLContext =
result = defaultSslContext
when defined(ssl):
if result == nil:
defaultSSLContext = newContext(verifyMode = CVerifyNone)
Вместо этого ваш код Python пытается правильно проверить сертификат, поскольку библиотека requests
делает это по умолчанию.И он не может проверить сертификат, потому что что-то не так - либо с вашей настройкой, либо с сервером.
Неясно, кто выпустил сертификат для вашего сайта, но если его нет в вашем хранилище CA по умолчанию, вы можете использоватьverify
аргумент requests
для указания ЦС эмитента.См. эту документацию для подробностей.
Если сайт, к которому вы пытаетесь получить доступ, работает с браузером, но не работает с вашей программой, возможно, он использует специальный центр сертификации, который был добавлен в качестве доверенного для браузера (например, сертификат компании).Браузеры и Python используют разные хранилища доверия, поэтому этот добавленный сертификат необходимо добавить в Python или, по крайней мере, в вашу программу в качестве доверенных.Возможно также, что при настройке сервера возникли проблемы.Браузеры могут иногда обходить такие проблемы, как отсутствие промежуточного сертификата, а Python - нет.В случае общедоступного сайта вы можете использовать SSLLabs , чтобы проверить, что не так.