HttpClient 是Apache Jakarta Common 下的子项目,可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。
HttpClient作用:
-
发送HTTP请求
-
接收响应数据
当我们在使用扫描支付、查看地图、获取验证码、查看天气等功能时应用程序本身并未实现这些功能,都是在应用程序里访问提供这些功能的服务,访问这些服务需要发送HTTP请求,并且接收响应数据,可通过HttpClient来实现。
HttpClient的maven坐标:
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.13</version>
</dependency>
HttpClient的核心API:
-
HttpClient:Http客户端对象类型,使用该类型对象可发起Http请求。
-
HttpClients:可认为是构建器,可创建HttpClient对象。
-
CloseableHttpClient:实现类,实现了HttpClient接口。
-
HttpGet:Get方式请求类型。
-
HttpPost:Post方式请求类型。
HttpClient发送请求步骤:
-
创建HttpClient对象
-
创建Http请求对象
-
调用HttpClient的execute方法发送请求
HttpClient两种请求案例:
GET请求
创建Http客户端:使用 HttpClients.createDefault() 创建一个默认的 CloseableHttpClient 实例。
构建请求:使用 HttpGet 类创建一个 HTTP GET 请求对象,指定请求的 URL。
发送请求:通过 httpClient.execute(httpGet) 发送请求并接收响应。
关闭资源:处理完返回的数据时关闭资源。
@Test
public void testGet() throws IOException {
//创建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();
}
POST请求
创建 HTTP 客户端:使用 HttpClients.createDefault() 创建一个默认的 CloseableHttpClient 实例。
构建 POST 请求:使用 HttpPost 类创建一个 HTTP POST 请求对象,指定请求的 URL。
设置请求体:创建一个 JSON 对象并将其转换为字符串。
使用 StringEntity 包装 JSON 字符串,并设置请求体的编码方式和内容类型。
将 StringEntity 对象设置为 POST 请求的实体部分。
发送请求:通过 httpClient.execute(httpPost) 发送请求并获取响应。
关闭资源:处理完数据后关闭资源。
引入fastjson依赖,能够将对象转化为字符串
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.76</version>
</dependency>
@Test
public void testPost() throws IOException {
//创建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();
}