在 Java 11 及更高版本中,java.net.http.HttpClient
是一个现代化的 HTTP 客户端,支持异步和同步请求。虽然 HttpClient
本身没有显式的连接池管理 API,但它在内部实现了连接池,以提高性能和资源利用效率。
HttpClient
默认会重用连接,以减少连接建立的开销。你可以通过配置 HttpClient
的 HttpClient.Builder
来调整一些连接相关的参数,例如连接超时、版本等。
import java.net.http.HttpClient;
import java.time.Duration;
public class HttpClientExample {
public static void main(String[] args) {
HttpClient client = HttpClient.newBuilder()
.connectTimeout(Duration.ofSeconds(10))
.version(HttpClient.Version.HTTP_2)
.build();
// 使用 client 发送请求
}
}
虽然 HttpClient
没有直接提供连接池配置的 API,但你可以通过以下方式间接影响连接池行为:
你可以设置连接超时,以确保连接不会无限期地保持打开状态。
HttpClient client = HttpClient.newBuilder()
.connectTimeout(Duration.ofSeconds(10))
.build();
你可以为每个请求设置超时,以确保请求不会无限期地等待响应。
import java.net.URI;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;
public class HttpClientExample {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newBuilder()
.connectTimeout(Duration.ofSeconds(10))
.build();
HttpRequest request = HttpRequest.newBuilder()
.uri(new URI("https://example.com"))
.timeout(Duration.ofSeconds(5))
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
如果你需要通过代理服务器发送请求,可以配置代理。
import java.net.InetSocketAddress;
import java.net.ProxySelector;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;
import java.time.Duration;
public class HttpClientExample {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newBuilder()
.connectTimeout(Duration.ofSeconds(10))
.proxy(ProxySelector.of(new InetSocketAddress("proxy.example.com", 8080)))
.build();
HttpRequest request = HttpRequest.newBuilder()
.uri(new URI("https://example.com"))
.timeout(Duration.ofSeconds(5))
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
如果你需要更高级的连接池管理功能,可以考虑使用第三方 HTTP 客户端库,例如 Apache HttpClient 或 OkHttp。这些库提供了更丰富的连接池配置选项。
领取专属 10元无门槛券
手把手带您无忧上云