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