使用HttpClient发送Http请求需要在项目中导入相关依赖:
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.13</version>
</dependency>
1、 HttpClient发送Get请求
分如下几步:
- 获取HttpClient对象。使用HttpClients.createDefault()
- 创建请求对象
- 发送Get请求,获取响应结果
- 解析响应结果(获取状态码,获取响应数据)
- 释放资源
Java代码示例:
public void testHttpGet() throws IOException {
// 1. 获取HttpClient对象
CloseableHttpClient aDefault = HttpClients.createDefault();
// 2. 创建请求对象,创建Get请求对象时,传入要访问的资源路径
HttpGet httpGet = new HttpGet("http://localhost:8080//demo");
// 3. 发送请求,获取响应结果,调用execute()方法发送请求可能会出现异常,需要处理。
CloseableHttpResponse response = aDefault.execute(httpGet);
// 4.1 获取响应状态码,
int statusCode = response.getStatusLine().getStatusCode();
System.out.println("statusCode = " + statusCode);;
// 4.2 解析响应结果。响应结果封装在HttpEntity对象中,可以使用EntityUtils工具类解析。
HttpEntity entity = response.getEntity();
String body = EntityUtils.toString(entity);
System.out.println("body = " + body);
// 5. 释放资源,最好是放在finally块中
response.close();
aDefault.close();
}
2、HttpClient发送Post请求
分如下几步:
- 创建HttpClient请求对象。使用HttpClients.createDefault()
- 创建Post请求对象。直接new一个HttpPost()对象,注意构造方法中传入请求资源路径
- 构造请求体。请求体一般使用Json格式存放请求数据。通过Post请求对象调用setEntity()方法设置请求体。setEntity()方法需要传入一个Entity接口实现类对象。Entity接口实现类对象有很多,这里以StringEntity举例。在StringEntity构造方法中需要传入一个Json格式的字符串,因此使用FastJson中的JsonObject类构造一个Json对象转成Json字符串。
- 指定编码格式和数据格式。在构造好请求体后,需要给请求体指定编码格式和数据格式。分别通过Entity实现类对象调用setContentEncoding()方法和setContentType()方法实现。
- 设置响应体。通过HttpPost()对象调用setEntity()方法设置请求体。
- 发送请求,获取响应结果
- 解析结果
- 释放资源
Java代码示例:
public void testHttpClient() throws IOException {
// 1. 创建HttpClient请求对象
CloseableHttpClient aDefault = HttpClients.createDefault();
// 2. 创建Post请求对象,设置请求路径
HttpPost httpPost = new HttpPost("http://localhost:8080//demo");
// 3. 构造请求体
// 请求数据以Json格式放在请求体中
// 请求体需要一个Entity接口的实现类对象,此处构造一个StringEntity对象作为请求体
JSONObject jsonObject = new JSONObject(); // 使用阿里的FastJson构造Json格式数据
jsonObject.put("name", "Tom");
jsonObject.put("age", 18);
jsonObject.put("gender", 1);
StringEntity entity = new StringEntity(jsonObject.toString()); // 转成Json格式字符串传入StringEntity构造方法
// 4. 指定编码格式与数据格式
entity.setContentType("application/json"); // 数据格式
entity.setContentEncoding("utf-8"); // 编码格式
// 5. 设置响应体
httpPost.setEntity(entity);
// 6. 发送请求,获取响应结果
CloseableHttpResponse response = aDefault.execute(httpPost);
// 7. 解析响应结果
// 7.1 获取状态码
int statusCode = response.getStatusLine().getStatusCode();
System.out.println("statusCode = " + statusCode);
// 7.2 获取响应数据
HttpEntity entity1 = response.getEntity();
String body = EntityUtils.toString(entity1);
System.out.println("body = " + body);
// 8. 释放资源
aDefault.close();
response.close();
}