Http Post Indy10错误Delphi 7:创建SSL上下文时出错

问题描述 投票:0回答:1

我正在使用带有Indy 10.6.2.5459的Delphi 7来不时向服务器发出POST请求:

sParams := '?ultimaAlteracao='+FormatDateTime('YYYY-MM-DD',now())+'T00:00:00.000';
FidHTTP := TIdHTTP.Create;
try
  FidHTTP.Request.Clear;
  FidHTTP.Request.Accept           := 'application/json;charset=UTF-8';
  FidHTTP.Request.CharSet          := 'UTF-8';
  FidHTTP.Response.ContentType     := 'application/json;charset=UTF-8';
  FidHTTP.Response.ContentEncoding := 'UTF-8';
  FidHTTP.Request.CustomHeaders.AddValue('Authorization','Basic '+EncodeBase64('xx:xx@123456'));

  JsonStream := TStringStream.Create('');
  JsonStream.Position := 0;
  try
    FidHTTP.Get('https://'+server+'/LinxImportacaoArquivo/GetSelecaoDadosMDMNCM'+sParams, JsonStream);
    DataString := JsonStream.DataString;
  finally
    FreeAndNil(JsonStream);
  end;
finally
  FreeAndNil(FidHTTP);
end;

一段时间后,它开始失败并返回:

创建SSL上下文时出错。错误:140A90F1:SSL例程:SSL_CTX_new:无法加载ssl2 md5例程

如果我重新启动应用程序,它会再次运行一段时间。我找到了一些有同样问题的人:herehere

根据我所学到的,可能是其他一些使用Indy提出干扰请求的过程,我引用

在openssl库中,某些类型的静态成员初始化似乎是一个问题。我有2个库,它们都使用openssl库,让我们称它们为A和B.当应用程序启动时,A和B都能够成功创建安全上下文。稍后,当库B尝试创建另一个安全上下文时,它会失败。库A和B都是我们应用程序的模块插件,因此它们都将加载,但如果不需要,它将被卸载。

实际上,我的应用程序有很多其他进程正在执行,通过indy10或WinInet发出http请求。

所以,我的问题是:是否有一些程序我可以调用Indy10来初始化在opensll库上释放它的东西?

post openssl delphi-7 indy10
1个回答
0
投票

我发现在IdSSLOpenSSL单元中有一个名为UnLoadOpenSSLLibrary的过程。如果我总是在我的代码之前调用该过程,则不会发生错误。

© www.soinside.com 2019 - 2024. All rights reserved.