温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java HTTP超时如何设置

发布时间:2026-10-01 13:20:18 来源:亿速云 阅读:90 作者:小樊 栏目:编程语言

在 Java 中,“HTTP 超时”通常分为连接超时(connect timeout)、读取超时(read timeout),有时还有写入超时或请求超时。下面按常见方式分别说明。


一、使用 HttpURLConnection(JDK 原生)

URL url = new URL("https://example.com");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();

// 连接超时(毫秒)
conn.setConnectTimeout(5000);
// 读取超时(毫秒)
conn.setReadTimeout(10000);

conn.setRequestMethod("GET");
int code = conn.getResponseCode();

✅ 适用于简单场景
❌ 功能较弱,不支持连接池


二、使用 Apache HttpClient(推荐)

1️⃣ HttpClient 4.5+

RequestConfig config = RequestConfig.custom()
        .setConnectTimeout(5000)      // 连接超时
        .setSocketTimeout(10000)      // 读取超时
        .setConnectionRequestTimeout(2000) // 从连接池获取连接超时
        .build();

CloseableHttpClient client = HttpClients.custom()
        .setDefaultRequestConfig(config)
        .build();

HttpGet get = new HttpGet("https://example.com");
CloseableHttpResponse response = client.execute(get);

⚠️ 超时单位:毫秒


三、使用 OkHttp(非常常用)

OkHttpClient client = new OkHttpClient.Builder()
        .connectTimeout(5, TimeUnit.SECONDS)
        .readTimeout(10, TimeUnit.SECONDS)
        .writeTimeout(10, TimeUnit.SECONDS)
        .build();

Request request = new Request.Builder()
        .url("https://example.com")
        .build();

try (Response response = client.newCall(request).execute()) {
    // 处理响应
}

✅ 默认超时就是 10s
✅ 支持异步、连接池


四、使用 Spring RestTemplate

SimpleClientHttpRequestFactory factory =
        new SimpleClientHttpRequestFactory();

factory.setConnectTimeout(5000);
factory.setReadTimeout(10000);

RestTemplate restTemplate = new RestTemplate(factory);

如果是 Apache HttpClient:

RestTemplate restTemplate = new RestTemplate(
    new HttpComponentsClientHttpRequestFactory(httpClient)
);

五、使用 Spring WebFlux / WebClient(响应式)

WebClient client = WebClient.builder()
        .clientConnector(new ReactorClientHttpConnector(
                HttpClient.create()
                        .responseTimeout(Duration.ofSeconds(10))
        ))
        .build();

六、超时类型说明(重要)

超时类型 含义
Connect Timeout 建立 TCP 连接的最长时间
Read Timeout 连接建立后,等待数据返回的时间
Write Timeout 发送请求数据的时间
Connection Request Timeout 从连接池获取连接的时间

七、常见坑

  1. 只设 readTimeout 不设 connectTimeout
  2. 超时后抛异常:
    • SocketTimeoutException
    • ConnectTimeoutException
  3. 生产环境建议:
    • 连接超时:2–5s
    • 读取超时:5–10s

如果你能告诉我:

  • 用的是 哪种 HTTP 客户端
  • 是 同步还是异步
  • 是否是 Spring 项目

我可以直接给你一份可复制的完整代码。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手