Единственный способ, которым может возникнуть исключение, - это когда:
вы присвоили TIdSSLIOHandlerSocketOpenSSL
компонент для свойства TIdHTTP.IOHandler
.
Он попытаетсяинициализируйте OpenSSL, даже если вы делаете HTTP-запрос, поскольку существует вероятность того, что любой HTTP-запрос будет перенаправлен на HTTPS, поэтому Indy подготавливает OpenSSL при установке TCP-соединения, на всякий случай.
вы не развернули DLL-библиотеки OpenSSL (libeay32.dll
и ssleay32.dll
или эквивалентную для вашей целевой платформы) с вашим приложением - ИЛИ - вы развернули неверную версию DLL, которые не совместимы сваша версия Indy.
Если вы собираетесь использовать TIdSSLIOHandlerSocketOpenSSL
, вам нужны соответствующие DLL.Indy в настоящее время поддерживает до OpenSSL 1.0.2, но не OpenSSL 1.1.0 или новее (пока - то есть в списке TODO ).
Когда повышается IndyИсключение «Не удалось загрузить библиотеку SSL», затем вы можете вызвать функцию Indy WhichFailedToLoad()
в блоке IdSSLOpenSSLHeaders
, чтобы выяснить, произошел ли сбой из-за того, что DLL не удалось загрузить в память, или потому что в DLL отсутствуют экспорты, которые IndyТребуется.
В модуле IdSSLOpenSSL
также есть функция OpenSSLVersion()
, чтобы сообщать, какая версия OpenSSL была загружена в память.
В вашем случае перенаправление с HTTP на HTTPS отсутствует.случается, но ошибка все еще происходит внутри, которая TIdHTTP
глотает, поскольку HTTPS не используется.Ваш код не увидит исключение во время выполнения.Но ваш отладчик будет.