Http Post Indy10错误Delphi 7:创建SSL上下文时出错
我使用Delphi 7和Indy 10.6.2.5459不时向服务器发出POST请求: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
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+封电子邮件时遇到了相同的错误。这个解决方案解决了这个问题。。现在。