Telegram Bot API调用报Network is unreachable错误如何排查
问题现象
开发Telegram API机器人过程中,程序运行阶段持续抛出网络错误,内置重试逻辑多次发起请求均失败。
核心报错特征:请求https://api.telegram.org:443端点时触发java.net.SocketException,异常提示为Network is unreachable: no further information。
完整错误日志:
Jun 22, 2022 12:13:10 PM org.apache.http.impl.execchain.RetryExec execute INFO: I/O exception (java.net.SocketException) caught when processing request to {s}->https://api.telegram.org:443: Network is unreachable: no further information Jun 22, 2022 12:13:11 PM org.apache.http.impl.execchain.RetryExec execute INFO: Retrying request to {s}->https://api.telegram.org:443 Jun 22, 2022 12:13:32 PM org.apache.http.impl.execchain.RetryExec execute INFO: I/O exception (java.net.SocketException) caught when processing request to {s}->https://api.telegram.org:443: Network is unreachable: no further information Jun 22, 2022 12:13:32 PM org.apache.http.impl.execchain.RetryExec execute INFO: Retrying request to {s}->https://api.telegram.org:443
相关报错截图:
排查思路
按从底层到应用层的顺序逐段排查:
- 基础连通性校验:在程序运行的主机环境直接测试到
api.telegram.org:443的连通性,确认底层网络是否可达 - 网络策略校验:检查主机防火墙、云服务器安全组、出口网关的访问规则,确认是否存在针对
api.telegram.org域名、443端口的出站拦截 - 代理配置校验:若主机环境无法直连国际互联网,检查程序内HTTP客户端是否正确配置了可用的正向代理,代理参数是否被Apache HTTP组件正确加载
- DNS解析校验:测试主机DNS服务是否能正常解析
api.telegram.org的IP地址,排除解析失败导致的路由不可达 - 客户端配置校验:检查Apache HTTP客户端的超时配置、路由配置是否存在错误,是否存在配置冲突导致请求无法正常路由
解决方案
针对排查出的不同问题对应处理:
- 网络直连不通场景:部署合规可用的正向代理,在初始化Apache HttpClient时显式传入代理配置,参考代码:
// 配置HTTPS请求代理 HttpHost telegramProxy = new HttpHost("127.0.0.1", 7890, "http"); CloseableHttpClient httpClient = HttpClients.custom() .setProxy(telegramProxy) .setDefaultRequestConfig(RequestConfig.custom() .setConnectTimeout(10000) .setSocketTimeout(30000) .build()) .build(); - 网络策略拦截场景:调整防火墙、安全组、网关规则,放通程序到
api.telegram.org443端口的出站访问权限 - DNS解析异常场景:将主机DNS更换为可用公共DNS,或在本地hosts中配置
api.telegram.org的有效解析记录,修复解析故障 - 客户端配置异常场景:调整重试策略,将固定短间隔重试改为指数退避重试,避免高频请求触发网络限流;同时合理设置连接、读取超时阈值,避免请求长时间阻塞触发异常
内容的提问来源于stack exchange,提问作者DashDZ
相关产品推荐
相关产品推荐

