You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java执行HTTP源验证时抛出java.net.ConnectException异常排查

异常根因

从异常栈最底层的java.nio.channels.UnresolvedAddressException可以直接定位:Java进程在发起网络连接时,无法将目标域名app.pluralsight.com解析为有效的IP地址,连接在TCP握手前的DNS解析阶段就直接失败了,根本没有进入HTTP请求发送、响应处理的流程。
你本地浏览器可以正常访问该站点,不代表Java进程有相同的网络访问能力,常见触发场景包括:

  • JVM默认不会自动继承系统/浏览器的代理配置:如果你的网络环境需要通过代理访问境外站点,浏览器走代理可以正常解析域名、访问站点,但JVM直连公网时会被网络策略拦截,无法完成DNS解析
  • 当前运行环境的DNS服务器配置异常,无法返回该域名的有效解析记录
  • 本地安全软件、防火墙策略限制了Java进程的网络访问权限,拦截了对应的DNS查询请求
修复步骤

按照优先级依次排查处理:

  1. 先确认解析故障
    单独运行以下测试代码,验证JVM层面的域名解析能力:
    import java.net.InetAddress;
    public class DnsTest {
        public static void main(String[] args) throws Exception {
            // 打印解析到的IP,抛异常则说明解析失败
            System.out.println(InetAddress.getByName("app.pluralsight.com"));
        }
    }
    
    如果这段代码直接抛出UnknownHostException,即可100%确认是DNS解析层面的问题。
  2. 给HttpClient显式配置代理(最常见场景)
    如果你本地访问该站点需要走代理,不要用HttpClient.newHttpClient()创建默认客户端,要在构建客户端时显式传入代理配置,示例:
    import java.net.InetSocketAddress;
    import java.net.ProxySelector;
    // 替换成你本地实际可用的代理地址和端口
    HttpClient client = HttpClient.newBuilder()
            .proxy(ProxySelector.of(new InetSocketAddress("127.0.0.1", 7890)))
            .build();
    
    如果你的代理需要身份认证,还要额外配置Authenticator传入代理的账号密码。
  3. 调整JVM DNS配置
    如果不需要走代理,可以在IDE的运行配置中给JVM添加启动参数,指定可用的公共DNS服务器(内网环境请替换为公司内部可用的DNS地址):
    -Dsun.net.spi.nameservice.nameservers=114.114.114.114,8.8.8.8
    -Dsun.net.spi.nameservice.provider=default
    
  4. 排查权限拦截
    检查本地防火墙、安全软件的规则,确认没有拦截java进程的出站网络访问请求。

注意:你代码中使用的HttpResponse.BodyHandlers.discarding()逻辑没有问题,异常发生在连接建立阶段,不需要调整HTTP请求方法、响应体处理器相关的代码。

内容的提问来源于stack exchange,提问作者Shashank Deepak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 12:18:19