2

我在使用一些涉及 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');

自从几天前网站关闭以来,我收到“Peer 10054 重置连接”错误,当它再次出现时,代码不再起作用。

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

我尝试使用各种选项(Cookie 处理、句柄重定向、HTTPOptions 等),我还将 SSL 库更新为 1.0.2q(Indy 还不能使用 OpenSSL 1.1.0),但整个事情都没有不想工作。

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

4

1 回答 1

4

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

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

您需要配置TIdSSLIOHandlerSocketOpenSSL以启用 TLS 1.1 和/或 1.2。你可以通过它的SSLOptions.SSLVersions属性来做到这一点。然后TIdHTTP.Get()将再次工作(我测试过)。

于 2018-12-03T22:55:52.670 回答