Delphi:idHttp + SSL

max*_*fax 12 delphi ssl indy idhttp

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

每个人都说TIdSSLIOHandlerSocket,但我只有TIdSSLIOHandlerSocketOpenSSL.如果我使用TIdSSLIOHandlerSocketOpenSSL,我有一个错误'无法加载SSL库'.有人说它需要一个图书馆,但最不提的是它.我是否需要使用http://www.indyproject.org/sockets/SSL.EN.aspx中的库?

我在程序的文件夹中有这些DLL.根据:http://edn.embarcadero.com/article/31279 "在运行时,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;
Run Code Online (Sandbox Code Playgroud)

为什么我有这个错误?我有Delphi 2010.

Rob*_*edy 7

要使用Indy的OpenSSL类,您需要ssleay32.dlllibeay32.dll.从您尝试执行的Indy代码中的异常来源可能已经很明显.

这些库链接到问题中提到的Indy页面.如果您在法律上允许这样做,您可以将其与您的申请一起分发.将它们放在DLL的任何地方(通常是您的应用程序目录).

TIdSSLIOHandlerSocketOpenSSL是抽象TIdSSLIOHandlerSocket类的特定于OpenSSL的后代.如果您使用的是其他SSL库而不是OpenSSL,则可以使用不同的后代类.


max*_*fax 6

下载的OpenSSL 1.0.0d-i386- 的Win32 -rev2.zip,不是的OpenSSL 1.0.0d-x64_86- Win64上从-rev2.zip http://indy.fulgan.com/SSL/

请阅读此处:https://forums.embarcadero.com/thread.jspa?threadID = 15569

  • 对.您正在编写32位程序,因此需要32位DLL. (2认同)