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

Http Post Indy10错误Delphi 7:创建SSL上下文时出错,post,openssl,delphi-7,indy10,Post,Openssl,Delphi 7,Indy10,我使用Delphi 7和Indy 10.6.2.5459不时向服务器发出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

我使用Delphi 7和Indy 10.6.2.5459不时向服务器发出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\u CTX\u新建:无法加载ssl2 md5例程

如果我重新启动应用程序,它会再次工作一段时间。 我发现一些人也有同样的问题:而且

从我所学到的,它可以是一些其他的过程,使用印地来提出一个干扰的请求,我引用

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

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


所以,我的问题是:是否有一些过程我可以调用Indy10使其初始化在opensll库中释放的内容?

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

另一方面,您不应该使用
TIdHTTP.Request.CustomHeaders
属性手动发送
Basic
身份验证凭据。设置
TIdHTTP.Request.BasicAuthentication=true
并改用
TIdHTTP.Request.Username
TIdHTTP.Request.Password
属性。而
UTF-8
不是有效的
ContentEncoding
。当接收字符串响应时,应该使用返回
字符串的
TIdHTTP.Get()
重载,而不是填充
TStream
的重载,让
TIdHTTP
为您处理响应的字符集:
DataString:=FidHTTP.Get(url)
Indy不会多次卸载和重新加载OpenSSL,一旦加载,它就会保持加载状态(除非您手动卸载),因此这个问题实际上不应该发生在第一位,除非您在包中使用Indy,并且该包被多次卸载和重新加载。加载OpenSSL后卸载它确实不是一个好主意,因为这样做有内部问题,它确实不是一个卸载安全库。@RemyLebeau太糟糕了,因为我在尝试使用SSL通过SMTP发送第2+封电子邮件时遇到了相同的错误。这个解决方案解决了这个问题。。现在。