使用一些适用于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年以来,相同的代码就在类似的应用程序中工作。
答案 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()
将再次起作用(我已经对其进行了测试)。