HttpClient 是Apache Jakarta Common 下的子项目,可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。
HttpClient作用是什么?
答:发送HTTP请求、接收响应数据
为什么要在Java程序中发送Http请求?有哪些应用场景呢?
答:扫描支付、查看地图、获取验证码、查看天气等功能
其实,应用程序本身并未实现这些功能,都是在应用程序里访问提供这些功能的服务,访问这些服务需要发送HTTP请求,并且接收响应数据,可通过HttpClient来实现。
我们要使用HttpClient要导入相应的maven坐标:
org.apache.httpcomponents
httpclient
4.5.13
注:如果你的项目之前导入过 aliyun-sdk-oss 的maven坐标,这里就不需要导入HttpClient了,因为aliyun-sdk-oss李爱你包含了HttpClient坐标了。
com.aliyun.oss
aliyun-sdk-oss
HttpClient的核心API有哪些?
HttpClient:Http客户端对象类型,使用该类型对象可发起Http请求。
HttpClients:可认为是构建器,可创建HttpClient对象。
CloseableHttpClient:实现类,实现了HttpClient接口。
HttpGet:Get方式请求类型。
HttpPost:Post方式请求类型。
HttpClient发送请求步骤 ?
1、创建HttpClient对象
2、创建Http请求对象
3、调用HttpClient的execute方法发送请求
我们编写测试代码,发送GET请求。
首先HttpClients调用createDefault方法来创建HttpClient对象,然后new一个 Http请求对象,调用HttpClient的execute方法发送请求。然后在response里面getEntity()来解析数据,然后再将entity转为String 然后输出,最后记得关闭资源。
实现步骤:
1、创建HttpClient对象
2、创建请求对象
3、发送请求,接受响应结果
4、解析结果
5、关闭资源
@Test
public void testGet() throws IOException {
// 创建HttpClient对象
CloseableHttpClient httpClient = HttpClients.createDefault();
// 创建Http请求对象
HttpGet httpGet = new HttpGet("http://localhost:8080/user/shop/status");
// 调用HttpClient的execute方法发送请求
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();
}
getStatusLine()方法返回保存请求状态的StatusLine对象。
entityutils.tostring方法是一个实体工具类,主要用于对实体类进行操作。
这里将response.getStatusLine()与entity直接输出,看看输出的结果是啥?
在HttpClientTest中添加POST方式请求方法,相比GET请求来说,POST请求若携带参数需要封装请求体对象,并将该对象设置在请求对象中。
实现步骤:
创建HttpClient对象
创建请求对象
发送请求,接收响应结果
解析响应结果
关闭资源
同样的也是先创建HttpClient对象,然后创建Http请求对象,然后设置需要传过去的Json数据,然后设置entity对象的数据,再设置数据的格式,后面httpClient调用方法execute,发送请求,然后获取状态码,输出;然后在response拿出Entity,再转为string 输出,最后关闭资源。
@Test
public void testPost() throws Exception {
// 创建HttpClient对象
CloseableHttpClient httpClient = HttpClients.createDefault();
// 创建Http请求对象
HttpPost httpPost = new HttpPost("http://localhost:8080/admin/employee/login");
// 设置json数据
JSONObject jsonObject = new JSONObject();
jsonObject.put("username","admin");
jsonObject.put("password","123456");
// 设置entity对象的数据
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();
httpPost.clone();
}