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

时间:2018-12-06 12:54:35

标签: delphi indy indy10

我正在使用TIDHTTP从非https网址下载zip文件,例如以下代码:

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

尽管如此,我却收到异常消息“无法加载SSL库”。会发生例外,但之后仍然进行下载。

如何避免这种例外情况?

谢谢

1 个答案:

答案 0 :(得分:1)

发生异常的唯一方法是:

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

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

  • 您尚未在应用中部署OpenSSL DLL(libeay32.dllssleay32.dll,或与目标平台相当的DLL)-或-您部署了错误的 与您的Indy版本不兼容的DLL版本。

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

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

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

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