TIDHTTP:无法在非 https URL 上加载 SSL 库

TIDHTTP : Could not load SSL library on non https URLs

我正在使用 TIDHTTP 从非 https url 下载 zip 文件,如下面的代码:

IdHTTPProgress.DownloadFile('http://www.myurl.com/myfile.zip','c:\myfile.zip');

尽管如此,我遇到了异常 'Could not load SSL library'。出现异常,但之后仍会进行下载。

我怎样才能避免这个异常?

谢谢

发生异常的唯一方法是:

  • 您已将 TIdSSLIOHandlerSocketOpenSSL 组件分配给 TIdHTTP.IOHandler 属性。

    它会尝试初始化 OpenSSL,即使您正在发出 HTTP 请求,因为任何 HTTP 请求都可能重定向到 HTTPS,因此 Indy 在建立 TCP 连接时准备 OpenSSL,以防万一。

  • 您还没有为您的应用程序部署 OpenSSL DLL(libeay32.dllssleay32.dll,或与您的目标平台等效的文件) - 或者 - 您已经部署了 错误 与您的 Indy 版本不兼容的 DLL 版本。

    如果您要使用 TIdSSLIOHandlerSocketOpenSSL,您需要适当的 DLL。 Indy 目前最高支持 OpenSSL 1.0.2,但不支持 OpenSSL 1.1.0 或更高版本(目前 - 即 on the TODO list)。

当 Indy 引发“Could not load SSL library”异常时,您可以在 IdSSLOpenSSLHeaders 单元中调用 Indy 的 WhichFailedToLoad() 函数来查明失败是否是因为 DLL 加载失败到内存中,或者因为 DLL 缺少 Indy 需要的导出。

IdSSLOpenSSL单元中还有一个OpenSSLVersion()函数,用来报告哪个版本的OpenSSL已经加载到内存中。

在您的情况下,没有发生从 HTTP 到 HTTPS 的重定向,但错误仍然在内部发生,TIdHTTP 由于未使用 HTTPS 而被忽略。您的代码在运行时不会看到异常。但是你的调试器会。