即使设置了 SslOptions,我仍然在 Indy 中使用 TIdHTTP 从 https url 获取 "Socket Error # 10054 Connection reset by peer."
Even if SslOptions are set i keep having "Socket Error # 10054 Connection reset by peer." in Indy using TIdHTTP doing get from https url
我正在使用 TIdHTTP
从 https URL 获取,我的代码在使用 http 之前工作正常,但在 https 上我有
Socket Error # 10054 Connection reset by peer.
在许多 SO 答案中,我了解到 TLS 1.0 是默认设置,因此我尝试将其设置为 TLS 1.2
我尝试更改 TIdHTTP
和 TIdSSLIOHandlerSocketOpenSSL
中的许多属性,但没有成功。
失败的 URL 是 https://nesufficio.my.qualibus.it/FeriePermessiDemo/DOQualibus/QappCommandHandler
。
有一个我无法克服的握手问题,如果我禁用防火墙和代理并直接连接到 http URL 它就可以工作(即使在那种情况下我必须使用完整的 URL 有一个有意义的行为)。所以我的问题纯粹是在 Indy 中:如何成功连接到 URL?
这是我使用的代码:
procedure TForm1.btnGetFromMyWebserver(Sender: TObject);
var
IdHTTP: TIdHTTP;
IdSSLIOHandlerSocketOpenSSL: TIdSSLIOHandlerSocketOpenSSL;
response, url: string;
begin
IdHTTP := TIdHTTP.Create;
// here i set the custom headers that are not relevant
// to study the connection closed by peer problem
try
try
IdSSLIOHandlerSocketOpenSSL := TIdSSLIOHandlerSocketOpenSSL.Create(IdHTTP);
IdSSLIOHandlerSocketOpenSSL.Port := 443; // I tried to force the port to 443
IdSSLIOHandlerSocketOpenSSL.SSLOptions.Mode := sslmClient;
IdSSLIOHandlerSocketOpenSSL.SSLOptions.SSLVersions:= [sslvTLSv1_2];
IdHTTP.IOHandler := IdSSLIOHandlerSocketOpenSSL;
IdHTTP.HandleRedirects := True;
url := 'https://nesufficio.my.qualibus.it/FeriePermessiDemo/DOQualibus/QappCommandHandler'; // this is not the actual endpoint but it is enough to reproduce the handshaking error
response := IdHTTP.Get(url);
except
on e:Exception
do
response := e.message;
end;
finally
IdHTTP.Free;
end;
ShowMessage('Response was:' + response);
end;
能否请您帮帮我,帮我查明问题出在哪里?
我的 Indy 版本是 10.6.2.5298
,我使用 Delphi 10 Seattle。
提前致谢。
我意识到我使用的是非常旧的 Open SSL dll,根据 Remy Lebeau 的建议,通过从 GitHub 获取最新的,我设法使 gethttp 调用正常工作,即使使用 https
端点.
所以解决方案就是使用最新版本的 Open SSl dll。
我正在使用 TIdHTTP
从 https URL 获取,我的代码在使用 http 之前工作正常,但在 https 上我有
Socket Error # 10054 Connection reset by peer.
在许多 SO 答案中,我了解到 TLS 1.0 是默认设置,因此我尝试将其设置为 TLS 1.2
我尝试更改 TIdHTTP
和 TIdSSLIOHandlerSocketOpenSSL
中的许多属性,但没有成功。
失败的 URL 是 https://nesufficio.my.qualibus.it/FeriePermessiDemo/DOQualibus/QappCommandHandler
。
有一个我无法克服的握手问题,如果我禁用防火墙和代理并直接连接到 http URL 它就可以工作(即使在那种情况下我必须使用完整的 URL 有一个有意义的行为)。所以我的问题纯粹是在 Indy 中:如何成功连接到 URL?
这是我使用的代码:
procedure TForm1.btnGetFromMyWebserver(Sender: TObject);
var
IdHTTP: TIdHTTP;
IdSSLIOHandlerSocketOpenSSL: TIdSSLIOHandlerSocketOpenSSL;
response, url: string;
begin
IdHTTP := TIdHTTP.Create;
// here i set the custom headers that are not relevant
// to study the connection closed by peer problem
try
try
IdSSLIOHandlerSocketOpenSSL := TIdSSLIOHandlerSocketOpenSSL.Create(IdHTTP);
IdSSLIOHandlerSocketOpenSSL.Port := 443; // I tried to force the port to 443
IdSSLIOHandlerSocketOpenSSL.SSLOptions.Mode := sslmClient;
IdSSLIOHandlerSocketOpenSSL.SSLOptions.SSLVersions:= [sslvTLSv1_2];
IdHTTP.IOHandler := IdSSLIOHandlerSocketOpenSSL;
IdHTTP.HandleRedirects := True;
url := 'https://nesufficio.my.qualibus.it/FeriePermessiDemo/DOQualibus/QappCommandHandler'; // this is not the actual endpoint but it is enough to reproduce the handshaking error
response := IdHTTP.Get(url);
except
on e:Exception
do
response := e.message;
end;
finally
IdHTTP.Free;
end;
ShowMessage('Response was:' + response);
end;
能否请您帮帮我,帮我查明问题出在哪里?
我的 Indy 版本是 10.6.2.5298
,我使用 Delphi 10 Seattle。
提前致谢。
我意识到我使用的是非常旧的 Open SSL dll,根据 Remy Lebeau 的建议,通过从 GitHub 获取最新的,我设法使 gethttp 调用正常工作,即使使用 https
端点.
所以解决方案就是使用最新版本的 Open SSl dll。