Delphi:idHttp+;SSL

Delphi:idHttp+;SSL,delphi,ssl,indy,idhttp,Delphi,Ssl,Indy,Idhttp,请解释如何使用SSL(https://)从服务器下载文件。我在网上没有找到合适的答案 每个人都在谈论TidsLioHandlerSocket,但我只有TidsLioHandlerSocketOpenSSL。 如果使用TidsLioHandlerSocketOpenSSL,则出现错误“无法加载SSL库”。 有人说它需要一个图书馆,但大多数人甚至没有提到它。我需要从这里使用图书馆吗 我在程序文件夹中有这些DLL。根据:“在运行时,Indy尝试加载libeay32.dll和ssleay32.dll。”

请解释如何使用SSL(https://)从服务器下载文件。我在网上没有找到合适的答案

每个人都在谈论TidsLioHandlerSocket,但我只有TidsLioHandlerSocketOpenSSL。 如果使用TidsLioHandlerSocketOpenSSL,则出现错误“无法加载SSL库”。 有人说它需要一个图书馆,但大多数人甚至没有提到它。我需要从这里使用图书馆吗

我在程序文件夹中有这些DLL。根据:“在运行时,Indy尝试加载libeay32.dll和ssleay32.dll。”我不知道Indy尝试从何处加载DDL->我有一个错误:“无法加载SSL库。”

procedure TForm1.FormCreate(Sender: TObject);
    var  UpdateMemoryStream:tmemorystream;
    begin
    try
    UpdateMemoryStream:=TMemoryStream.Create;
                try
                idhttp2.Get('https://example.com/list.rar',UpdateMemoryStream); //I have: Exception class EIdOSSLCouldNotLoadSSLLibrary with message 'Could not load SSL library.'
                except
                    on E : Exception do 
                    begin showmessage('Error: '+E.Message); 
                    end;
                end;
    UpdateMemoryStream.SaveToFile('d:\1.rar');
    finally
    UpdateMemoryStream.Free;
    end;
    end;
为什么我会有这个错误?
我有Delphi 2010。

要使用Indy的OpenSSL类,需要ssleay32.dll和libeay32.dll。从您试图执行的Indy代码中的异常源来看,这可能是显而易见的

这些图书馆从问题中提到的Indy页面链接到。如果法律允许您这样做,您可以将其与应用程序一起分发。将它们放在DLL所在的位置(通常是应用程序目录)


TIdSSLIOHandlerSocketOpenSSL是抽象TIdSSLIOHandlerSocket类的OpenSSL特定子类。如果您使用的是其他SSL库而不是OpenSSL,那么您将使用不同的子类。

从中下载OpenSSL-1.0.0d-i386-win32-rev2.zip,而不是OpenSSL-1.0.0d-x64\u 86-win64-rev2.zip


也请阅读此处:

获得正确的DLL非常重要,因为有些DLL是通过指向M$Studio的链接编译的,因此在Delphi中不起作用。尝试
最新版本位于页面底部。

使用什么和如何使用并不重要。我只需要使用idHTTP+SSL下载一个文件。您能提供一个使用的示例吗?我将不胜感激。谢谢。@maxfax引发的异常“无法加载SSL库”已通过使用这些DLL解决。我已将它们保存在程序文件夹中!如何将它们链接到TidsLioHandlerSocketOpenSSL?您不需要将DLL链接到类。它们在运行时自动加载。您不必将它们链接到任何东西。当需要时,它们会自动加载普通的旧
LoadLibrary
。Maxfax,你需要自己做一些故障排除。您将获得一个异常,并且您拥有源代码,因此请查看代码以发现引发异常的条件。如果条件是失败的函数调用,则按照该函数的代码进行操作,并查看是什么条件导致该函数失败。一直跟着它走,直到你走不动为止。记录您的步骤,并在请求帮助时重新叙述。
TIdSSLIOHandlerSocket
是Indy 9中的类名
TIdSSLIOHandlerSocketOpenSSL
是Indy 10.Right中的新类名。您正在编写32位程序,因此需要32位DLL。