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

IntelliJ与Gradle构建Java项目时连接超时,curl请求正常

排查思路与解决方案

1. 检查JVM代理配置差异

curl默认使用系统代理,但Java程序(包括Gradle/IntelliJ运行的JUnit)可能读取不同的代理配置:

  • 查看项目根目录的gradle.properties,确认是否存在强制设置的代理参数:
    systemProp.http.proxyHost=xxx
    systemProp.http.proxyPort=xxx
    systemProp.https.proxyHost=xxx
    systemProp.https.proxyPort=xxx
    
  • 检查IntelliJ的代理设置:File > Settings > Appearance & Behavior > System Settings > HTTP Proxy,确保和系统代理一致。
  • 临时禁用代理测试,执行Gradle命令时添加参数:
    gradle build -Dhttp.proxyHost= -Dhttp.proxyPort= -Dhttps.proxyHost= -Dhttps.proxyPort=
    

2. 验证DNS解析差异

Java的DNS缓存策略与系统curl可能存在差异,导致解析到不可用的IP:

  • 在测试代码中添加日志,打印域名解析结果:
    import java.net.InetAddress;
    
    // 测试代码中插入
    InetAddress[] addresses = InetAddress.getAllByName("{domain}");
    for (InetAddress addr : addresses) {
        System.out.println("Java resolved IP: " + addr.getHostAddress());
    }
    
  • 和系统解析结果对比(执行nslookup {domain}),若不一致,刷新Java DNS缓存:
    java.security.Security.setProperty("networkaddress.cache.ttl", "0");
    

3. 检查HTTP客户端连接超时参数

Apache HttpClient的连接超时设置可能过短,而curl默认超时更长:

  • 查看SBHttp类中的超时配置,确认connectTimeout是否合理(比如是否小于实际网络连接所需时间):
    // 示例:调整超时参数测试
    RequestConfig config = RequestConfig.custom()
        .setConnectTimeout(10000) // 临时调至10秒
        .setSocketTimeout(10000)
        .build();
    

4. 排查网络权限限制

部分环境下,Java进程可能被防火墙/安全软件限制网络访问,而curl不受影响:

  • 检查系统防火墙规则,确认Java进程(Gradle启动的JVM、IntelliJ的JVM)是否允许访问目标端口80。
  • 编写极简Java测试类,排除业务代码干扰:
    import java.net.Socket;
    
    public class SimpleSocketTest {
        public static void main(String[] args) {
            try (Socket socket = new Socket("{domain}", 80)) {
                System.out.println("Connected successfully");
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    
    执行java SimpleSocketTest,验证基础连接是否正常。

5. 检查Hystrix超时配置

报错堆栈包含Hystrix,可能其全局超时覆盖了HTTP客户端设置:

  • 查看Hystrix配置,比如hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds,若该值小于HTTP连接所需时间,会提前触发超时。
  • 临时针对该命令调整超时,或禁用Hystrix超时测试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 00:36:29