我想下载 JSON 信息:
idHTTP := TIdHTTP.Create(nil);
JSON:=idHTTP.get('https://login.microsoftonline.com/common/.well-known/openid-configuration');
并得到一个错误
10054 连接被对方重置
。 在浏览器中下载即可。
我怎样才能找到问题?
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
自己反对并根据需要进行配置。