代码之家  ›  专栏  ›  技术社区  ›  Wolfgang Bures

如何解决idHTTP中的错误10054

  •  0
  • Wolfgang Bures  · 技术社区  · 11 月前

    我想在以下网址下载JSON信息

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

    并得到一个错误

    10054对等方重置连接

    . 在浏览器中下载是有效的。

    我怎样才能找到问题?

    1 回复  |  直到 11 月前
        1
  •  0
  •   Remy Lebeau    11 月前

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

    您正尝试从加密的HTTPS url下载,因此需要分配一个 TIdSSLIOHandlerSocketBase -衍生组件(例如 TIdSSLIOHandlerSocketOpenSSL )到 TIdHTTP.IOHandler 财产。但是,你似乎并没有这样做。

    如果你使用的是Indy的最新版本, TIdHTTP 提出一个 EIdIOHandlerPropInvalid 例外情况 SSLIOHandler 在请求HTTPS url时未分配。但是,如果你使用的是旧版本的Indy(你没有指出),它没有进行检查,那么有可能 TIdHTTP 正在创建TCP连接,然后服务器在没有收到TLS握手时立即重置连接。

    如果您使用的是Indy的最新版本,您可以添加 IdSSLOpenSSL 单位在你 uses 条款和 TIdHTTP 将创建默认值 TIdSSLIO处理器套接字OpenSSL 需要时为您创建实例,但请注意,它只启用了TLS 1.0,因此如果您需要使用TLS 1.1+,则必须创建 TIdSSLIO处理器套接字OpenSSL 对象自己并根据需要进行配置。