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.dll
和 ssleay32.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 而被忽略。您的代码在运行时不会看到异常。但是你的调试器会。
我正在使用 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.dll
和ssleay32.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 而被忽略。您的代码在运行时不会看到异常。但是你的调试器会。