在 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();
✅ 适用于简单场景
❌ 功能较弱,不支持连接池
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);
⚠️ 超时单位:毫秒
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
✅ 支持异步、连接池
RestTemplateSimpleClientHttpRequestFactory factory =
new SimpleClientHttpRequestFactory();
factory.setConnectTimeout(5000);
factory.setReadTimeout(10000);
RestTemplate restTemplate = new RestTemplate(factory);
如果是 Apache HttpClient:
RestTemplate restTemplate = new RestTemplate(
new HttpComponentsClientHttpRequestFactory(httpClient)
);
WebClient client = WebClient.builder()
.clientConnector(new ReactorClientHttpConnector(
HttpClient.create()
.responseTimeout(Duration.ofSeconds(10))
))
.build();
| 超时类型 | 含义 |
|---|---|
| Connect Timeout | 建立 TCP 连接的最长时间 |
| Read Timeout | 连接建立后,等待数据返回的时间 |
| Write Timeout | 发送请求数据的时间 |
| Connection Request Timeout | 从连接池获取连接的时间 |
SocketTimeoutExceptionConnectTimeoutException如果你能告诉我:
我可以直接给你一份可复制的完整代码。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。