德尔福:idHttp+SSL

标签 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。

最佳答案

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

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

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

关于德尔福:idHttp+SSL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6683127/

相关文章:

delphi - 如何混合 Mp3 文件

delphi如何设置tcpserver接收字符串数据

delphi - 如何通过名称(字符串)访问变量?

delphi - 如果可能的话如何调试delphi 2006 clientDataSet

multithreading - "EOSError 1400 - Invalid window handle"的可能原因

delphi - 断开连接时发生 IdHTTP 访问冲突

delphi - TIdCommandHandler : How to construct commands?

google-app-engine - 将 SSL 与 Dart 和托管虚拟机一起使用

c# - 使用证书文件通过 SSL 连接到 Web 服务

java - 如何使用代理和证书SSL设置Maven