【问题标题】:Delphi: idHttp+SSL德尔福:idHttp+SSL
【发布时间】:2011-10-04 17:12:36
【问题描述】:

请解释一下如何使用 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。

【问题讨论】:

  • TIdSSLIOHandlerSocket 是 Indy 9 中的类名。TIdSSLIOHandlerSocketOpenSSL 是 Indy 10 中的新类名。

标签: delphi ssl indy idhttp


【解决方案1】:

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

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

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

【讨论】:

  • 使用什么以及如何使用并不重要。我只需要使用 idHTTP+SSL 下载一个文件。你能提供一个使用示例吗?我会很感激。谢谢。
  • @maxfax 通过使用这些 DLL 解决了引发的“无法加载 SSL 库”的异常。
  • 我有它们在程序的文件夹中!如何将它们链接到 TIdSSLIOHandlerSocketOpenSSL?
  • 您不需要将 DLL 链接到类。它们在运行时自动加载。
  • 您不必将它们链接到任何东西。它们会在需要时自动加载普通的旧 LoadLibrary。 Maxfax,您需要自己进行一些故障排除。你得到了一个异常,并且你有源代码,所以查看代码以发现是什么条件导致了异常的引发。如果条件是一个失败的函数调用,那么按照该函数的代码,看看是什么条件导致它失败。继续跟随它,直到你不能走得更远。记录您的步骤并在您寻求帮助时重述它们。
【解决方案2】:

http://indy.fulgan.com/SSL/下载 openssl-1.0.0d-i386-win32-rev2.zip,而不是 openssl-1.0.0d-x64_86-win64-rev2.zip

也在这里阅读:https://forums.embarcadero.com/thread.jspa?threadID=15569

【讨论】:

  • 对。您正在编写 32 位程序,因此您需要 32 位 DLL。
【解决方案3】:

获取正确的 DLL 至关重要,因为有些 DLL 是通过指向 M$ Studio 的链接编译的,因此在 Delphi 中不起作用。试试https://indy.fulgan.com/SSL/ 最新版本位于页面底部。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-02
    • 2012-12-13
    • 1970-01-01
    相关资源
    最近更新 更多