【JavaWeb后端学习笔记】使用HttpClient发送Http请求

发布于:2024-12-18 ⋅ 阅读:(189) ⋅ 点赞:(0)

使用HttpClient发送Http请求需要在项目中导入相关依赖:

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.13</version>
</dependency>

1、 HttpClient发送Get请求

分如下几步:

  1. 获取HttpClient对象。使用HttpClients.createDefault()
  2. 创建请求对象
  3. 发送Get请求,获取响应结果
  4. 解析响应结果(获取状态码,获取响应数据)
  5. 释放资源

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请求

分如下几步:

  1. 创建HttpClient请求对象。使用HttpClients.createDefault()
  2. 创建Post请求对象。直接new一个HttpPost()对象,注意构造方法中传入请求资源路径
  3. 构造请求体。请求体一般使用Json格式存放请求数据。通过Post请求对象调用setEntity()方法设置请求体。setEntity()方法需要传入一个Entity接口实现类对象。Entity接口实现类对象有很多,这里以StringEntity举例。在StringEntity构造方法中需要传入一个Json格式的字符串,因此使用FastJson中的JsonObject类构造一个Json对象转成Json字符串。
  4. 指定编码格式和数据格式。在构造好请求体后,需要给请求体指定编码格式和数据格式。分别通过Entity实现类对象调用setContentEncoding()方法和setContentType()方法实现。
  5. 设置响应体。通过HttpPost()对象调用setEntity()方法设置请求体。
  6. 发送请求,获取响应结果
  7. 解析结果
  8. 释放资源

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();
}

网站公告

今日签到

点亮在社区的每一天
去签到