Delphi:idHttp + SSL

时间:2011-07-13 17:36:55

标签: 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;

为什么会出现此错误? 我有Delphi 2010。

3 个答案:

答案 0 :(得分:7)

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

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

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

答案 1 :(得分:6)

从{{3下载openssl-1.0.0d-i386- win32 -rev2.zip,而不是openssl-1.0.0d-x64_86- win64 -rev2.zip }}

另请阅读此处:http://indy.fulgan.com/SSL/

答案 2 :(得分:1)

获取正确的DLL是必不可少的,因为有些是使用M $ Studio的链接编译的,因此在Delphi中不起作用。试试https://indy.fulgan.com/SSL/ 最新版本位于页面底部。