Indy“通过对等方重置连接”错误。特定网站上的10054

时间:2018-12-03 21:06:55

标签: delphi indy rad-studio

使用一些适用于Indy和下载网页的代码的代码时,我遇到了一些问题。我使用的是RAD Studio 10.2 Tokyo。

网页如下:

https://donet.rfi.it/RFIPlatform/showDoc.do?compartimentoHidden=AN&docTypeHidden=CC

我使用的代码是自2011年以来具有相同代码的应用程序的一部分,并且始终运行良好。代码如下:

IDHTTP1.Get('https://donet.rfi.it/RFIPlatform/showDoc.do?compartimentoHidden=AN&docTypeHidden=CC');

由于网站几天前关闭,我收到“由对等方10054重置连接”错误,并且再次出现时,该代码不再起作用。

上述网页可以从浏览器中调用,甚至可以使用WGET下载,但是Indy失败了。

我尝试使用各种选项(Cookie处理,处理重定向,HTTPOptions等),并且还将SSL库更新为1.0.2q(Indy还不能使用OpenSSL 1.1.0),但是整个过程只是不想工作。

有人可以帮我弄清楚发生了什么吗?必须确保网站上有东西,因为我使用的代码自2011年以来是相同的,并且一直有效。在此之前,自2008年以来,相同的代码就在类似的应用程序中工作。

1 个答案:

答案 0 :(得分:2)

Indy的TIdSSLIOHandlerSocketOpenSSL组件默认情况下仅启用TLS 1.0。有问题的网站(https://donet.rfi.it)不再接受TLS 1.0(可能是为什么离线以更新其软件),现在仅接受TLS 1.1 +。

TIdHTTP能够成功建立到donet.rfi.it:443的TCP / IP连接,但是TIdSSLIOHandlerSocketOpenSSL一旦发送TLS 1.0握手请求,服务器就会强行关闭TCP连接。 TIdSSLIOHandlerSocketOpenSSL尝试读取服务器的握手响应时,出现“对等连接重置”错误。

您需要配置TIdSSLIOHandlerSocketOpenSSL才能启用TLS 1.1和/或1.2。您可以通过其SSLOptions.SSLVersions属性来实现。然后TIdHTTP.Get()将再次起作用(我已经对其进行了测试)。