HttpClient 是 Apache Jakarta Common 下的子项目,用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。HttpClient 已经应用在很多的项目中,比如 Apache Jakarta 上很著名的另外两个开源项目 Cactus 和 HTMLUnit 都使用了 HttpClient。
HttpClient 相比传统 JDK 自带的 URLConnection,增加了易用性和灵活性,它不仅是客户端发送 HTTP 请求变得容易,而且也方便了开发人员测试接口(基于 HTTP 协议的),即提高了开发的效率,也方便提高代码的健壮性。因此熟练掌握 HttpClient 是很重要的必修内容,掌握 HttpClient 后,相信对于 HTTP 协议的了解会更加深入。
HttpClient 是三方工具,首先需要引入依赖。如下:
<!-- 此处使用的是 5.x 版本,可以根据自身情况引入版本 -->
<dependency>
<groupId>org.apache.httpcomponents.client5</groupId>
<artifactId>httpclient5</artifactId>
<version>5.1.1</version>
</dependency>HttpClient实例的工厂类。PoolingHttpClientConnectionManager)来管理HTTP连接。HttpClient的一个具体实现,它实现了AutoCloseable接口。HttpRequest的具体实现,分别对应HTTP的GET和POST方法。HttpClientConnectionManager的一个具体实现。ManagedHttpClientConnection)。HttpHost转换为具体的网络地址。下面是一个使用这些组件的综合示例:
import org.apache.http.HttpHost;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.apache.http.util.EntityUtils;
public class HttpClientExample {
public static void main(String[] args) throws Exception {
// 创建连接池管理器
PoolingHttpClientConnectionManager connManager = new PoolingHttpClientConnectionManager();
// 设置最大连接数等参数(这里仅为示例)
connManager.setMaxTotal(100);
connManager.setDefaultMaxPerRoute(20);
// 创建 HttpClientBuilder 并设置连接池管理器
CloseableHttpClient httpClient = HttpClients.custom()
.setConnectionManager(connManager)
.build();
// 创建 HttpGet 请求
HttpGet httpGet = new HttpGet("http://example.com");
// 设置请求配置(可选)
RequestConfig requestConfig = RequestConfig.custom()
.setConnectTimeout(5000)
.setSocketTimeout(5000)
.build();
httpGet.setConfig(requestConfig);
try (CloseableHttpResponse response = httpClient.execute(httpGet)) {
// 检查响应状态码
int statusCode = response.getStatusLine().getStatusCode();
System.out.println("Status Code: " + statusCode);
// 获取响应内容并输出
String responseBody = EntityUtils.toString(response.getEntity(), "UTF-8");
System.out.println("Response: " + responseBody);
}
// 关闭 HttpClient(如果是 CloseableHttpClient)
httpClient.close();
}
}在这个示例中:
PoolingHttpClientConnectionManager 创建了一个连接池管理器,并设置了最大连接数等参数。HttpClients.custom() 创建了一个 HttpClientBuilder,并通过 setConnectionManager 方法设置了连接池管理器。