我删除了TIdHTTP和TIdSSLIOHandlerSocketOpenSSL,将IdHTTP的IOHandler设置为SSL处理程序,将TIdSSLIOHandlerSocketOpenSSL的模式设置为sllmClient。然后添加下面的按钮点击事件。我第一次从WhichFailedToLoad收到此错误。
显示,第二次按下按钮就可以了。 ssl dll位于.exe diretory中。
该服务可以在浏览器中正常运行并且正在生产中。为什么它第一次不起作用?
procedure TForm32.Button1Click(Sender: TObject);
var
output : TMemoryStream;
begin
output:=TMemoryStream.Create;
// IdOpenSSLSetLibPath(
try
IdHTTP1.get('https://localhost:444/Folder/service.svc',output);
output.position := 0;
memo1.lines.LoadFromStream(output);
except
on exception do
ShowMessage(WhichFailedToLoad());
end;
end;
TIA
答案 0 :(得分:3)
您应该更新到latest version of Indy和ssl dlls's,这应该完全摆脱异常。
答案 1 :(得分:3)
你必须使用一个非常陈旧且过时的Indy 10版本 - 该消息框中的大多数报告函数都有_Indy
后缀。
Indy 9及更早版本和早期的Indy 10版本需要定制的OpenSSL DLL,这些DLL添加了Indy特定的函数来访问尚未在公共OpenSSL API中公开的内部OpenSSL数据。一旦该数据在后来的API版本中公开,Indy 10就更新为不再需要定制的DLL了。它现在按原样使用标准化的OpenSSL DLL。
因此,您需要追踪旧的自定义Indy OpenSSL DLL,或者需要升级到最新的Indy 10版本。