HttpClient
简介:HttpClient是Apache Jakarta Common下的一个子项目,主要用于提供高效的、支持最新HTTP协议的客户端编程工具包。它支持HTTP协议的所有标准请求方法,如GET、POST、PUT、DELETE、OPTIONS等,并且支持HTTP协议的最新版本和建议
参考文档:
-
支持所有HTTP请求方法:如GET、POST、PUT、DELETE、OPTIONS等。
-
高效的连接管理:能够高效地管理与服务器的连接池,减少频繁创建和关闭连接的开销。
-
同步与异步请求:支持同步和异步请求,同步请求会阻塞线程直到响应返回,而异步请求则允许程序继续运行并在响应到达时处理它。
-
丰富的API:提供了丰富的接口来解析服务器的响应内容,例如解析JSON或XML响应体等
简单来说:就是可以使用Java代码的方式来发送http请求
核心API
HTTPClient接口
HttpClient
接口是 Apache HttpClient 库中的一个核心接口,它定义了执行 HTTP 请求和接收 HTTP 响应的基本方法。不同的 HttpClient 实现会提供具体的实现类来实现这个接口,从而提供与 HTTP 服务器进行交互的能力。
CloseableHttpClient接口
1.CloseableHttpClient
是一个核心接口,用于表示一个可以执行 HTTP 请求并接收 HTTP 响应的客户端。它继承自HttpClient
接口,并添加了close()
方法,允许显式关闭客户端实例以释放资源。
2.CloseableHttpClient
的主要用途是发送各种类型的 HTTP 请求(如 GET、POST、PUT、DELETE 等)到指定的服务器,并处理服务器返回的响应。它提供了灵活的配置选项,允许您设置连接参数、超时时间、重试策略等,以满足不同的网络请求需求。
- HttpClients类
HttpClients
是 Apache HttpClient 库中的一个工具类,提供了一系列静态方法用于创建CloseableHttpClient
实例。createDefault():创建一个具有默认配置的
CloseableHttpClient
实例。这种方法适用于大多数常见情况,它使用了一组合理的默认设置。custom():返回一个
HttpClientBuilder
实例,允许您通过链式调用来自定义CloseableHttpClient
的配置。这种方法提供了更高的灵活性,允许您根据具体需求配置客户端的各种参数。
- HttpRequestBase 抽象类
HttpGet、HttpPost、HttpPut、HttpDelete 等:这些类继承自
HttpRequestBase
,分别用于表示不同类型的 HTTP 请求(GET、POST、PUT、DELETE 等)。
- HttpEntity 接口
用于表示请求或响应的主体内容。它提供了读取和写入数据的方法。
- CloseableHttpResponse接口
1.CloseableHttpResponse
是一个接口,它表示一个可以关闭的 HTTP 响应。这个接口继承自HttpResponse
,并添加了close()
方法,允许在不再需要响应时显式关闭响应流以释放资源。2.它 的主要用途是封装 HTTP 服务器返回的响应信息,包括状态码、响应头部和响应体等。通过实现这个接口,HttpClient 库能够提供一个统一的方式来处理这些响应信息。
入门案例:
准备工作:改pom文件,添加支持HTTPClient的相关依赖
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.13</version>
</dependency>
在Java代码中使用HTTPClient的几个步骤如下:
①创建HttpClient对象
②创建Http请求对象
③调用HttpClient的execute方法发送请求
/**
* packageName com.sky.test
*
* @author 胡尔摩斯
* @version 1.0
* @version0 JDK 17
* @className HttpClientTest
* @date 2024/12/9 12:32
* @description TODO
*/
@SpringBootTest
public class HttpClientTest {
/**
* 测试通过httpclient发送GET方式的请求
*/
@Test
public void testGET() throws Exception {
//创建httpclient对象
CloseableHttpClient httpClient = HttpClients.createDefault();
//创建请求对象
HttpGet httpGet = new HttpGet("http://localhost:8080/user/shop/status");
//发送请求
CloseableHttpResponse response = httpClient.execute(httpGet);
//获取服务端返回的状态码
int statusCode = response.getStatusLine().getStatusCode();
System.out.println("服务端返回的状态码为:" + statusCode);
//获取响应体
HttpEntity entity = response.getEntity();
String body = EntityUtils.toString(entity);
System.out.println("服务端返回的数据为:" + body);
//关闭资源
response.close();
httpClient.close();
}
/**
* 测试通过httpclient发送POST方式的请求
*/
@Test
public void testPOST() throws Exception {
//创建httpclient对象
CloseableHttpClient httpClient = HttpClients.createDefault();
//创建请求对象
HttpPost httpPost = new HttpPost("http://localhost:8080/admin/employee/login");
JSONObject jsonObject = new JSONObject();
jsonObject.put("username", "admin");
jsonObject.put("password", "123456");
StringEntity entity=new StringEntity(jsonObject.toString());
//指定请求的编码方式
entity.setContentEncoding("UTF-8");
//数据类型
entity.setContentType("application/json");
httpPost.setEntity(entity);
//发送请求
CloseableHttpResponse response = httpClient.execute(httpPost);
//解析请求的返回结果
int statusCode = response.getStatusLine().getStatusCode();
System.out.println("响应码为:" + statusCode);
HttpEntity entity1 = response.getEntity();
String body = EntityUtils.toString(entity1);
System.out.println("响应数据为:" + body);
//关闭资源
response.close();
httpClient.close();
}
}