如何排查idHTTP调用微软OpenID配置接口时的10054错误?
使用TIdHTTP下载JSON时出现10054错误的排查方案
问题描述
我用以下代码通过TIdHTTP下载JSON信息:
idHTTP := TIdHTTP.Create(nil); JSON:=idHTTP.get('https://login.microsoftonline.com/common/.well-known/openid-configuration');
但遇到错误:
10054 Connection reset by peer
该链接在浏览器中可正常访问,求排查方法。
排查步骤
- 启用正确的SSL/TLS版本:微软的OpenID配置接口要求至少TLS 1.2,旧版Indy默认可能不支持。给TIdHTTP绑定
TIdSSLIOHandlerSocketOpenSSL组件,并指定SSL版本为TLS 1.2:var SSLHandler: TIdSSLIOHandlerSocketOpenSSL; begin idHTTP := TIdHTTP.Create(nil); SSLHandler := TIdSSLIOHandlerSocketOpenSSL.Create(idHTTP); SSLHandler.SSLOptions.SSLVersions := [sslvTLSv1_2]; idHTTP.IOHandler := SSLHandler; JSON := idHTTP.Get('https://login.microsoftonline.com/common/.well-known/openid-configuration'); end; - 添加浏览器模拟请求头:服务器可能会拒绝缺少标准头的请求,添加User-Agent等头信息模拟浏览器请求:
idHTTP.Request.UserAgent := 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'; // 可选:添加Accept头匹配JSON格式 idHTTP.Request.Accept := 'application/json, text/plain, */*'; - 检查代理配置:如果系统使用代理上网,TIdHTTP默认不会自动读取代理设置。可以手动配置代理参数,或者开启自动检测:
idHTTP.ProxyParams.AutoDetect := pdAutoDetect; - 排查网络拦截:确认程序没有被防火墙、杀毒软件或企业网关拦截出站连接,这类设备常过滤非浏览器发起的HTTPS请求。
- 更新Indy组件:旧版本Indy存在不少网络兼容性问题,更新到最新稳定版能解决大部分已知的握手或连接异常。
内容的提问来源于stack exchange,提问作者Wolfgang Bures
相关产品推荐
相关产品推荐

