如何解决 idHTTP 中的错误 10054

问题描述 投票:0回答:1

我想下载 JSON 信息:

idHTTP := TIdHTTP.Create(nil);
JSON:=idHTTP.get('https://login.microsoftonline.com/common/.well-known/openid-configuration');

并得到一个错误

10054 连接被对方重置

。 在浏览器中下载即可。

我怎样才能找到问题?

delphi indy
1个回答
0
投票

10054 表示 TCP 连接在远程端突然重置。

您正在尝试从加密的 HTTPS url 下载,因此您需要将

TIdSSLIOHandlerSocketBase
派生的组件(例如
TIdSSLIOHandlerSocketOpenSSL
)分配给
TIdHTTP.IOHandler
属性。 但是,你似乎并没有这样做。

如果您使用的是最新版本的 Indy,并且在请求 HTTPS url 时未分配

TIdHTTP
,则
EIdIOHandlerPropInvalid
会引发
SSLIOHandler
异常。 但是,如果您使用的是旧版本的 Indy(您没有指出),并且没有执行该检查,那么
TIdHTTP
可能正在创建 TCP 连接,然后服务器会在创建 TCP 连接时立即重置连接。没有收到 TLS 握手。

如果您使用的是最新版本的 Indy,您可以在

IdSSLOpenSSL
子句中添加
uses
单元,并且
TIdHTTP
会在需要时为您创建一个默认的
TIdSSLIOHandlerSocketOpenSSL
实例,但请注意它将仅启用 TLS 1.0,因此如果您需要使用 TLS 1.1+,则必须创建
TIdSSLIOHandlerSocketOpenSSL
自己反对并根据需要进行配置。

© www.soinside.com 2019 - 2024. All rights reserved.