当前位置: 首页 > article >正文

接口调用工具-HttpClient,HttpUtil,RestTemplate

文章目录

  • 一、HttpClient
    • 1. 介绍
    • 2. Get请求方式
    • 3. Post请求方式
  • 二、RestTemplate
  • 三、Hutool工具包 --- HttpUtil


一、HttpClient

1. 介绍

HttpClient 是Apache Jakarta Common 下的子项目,可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。

HttpClient作用:

  • 发送HTTP请求
  • 接收响应数据

HttpClient应用场景:

  • 当我们在使用扫描支付、查看地图、获取验证码、查看天气等功能时

其实,应用程序本身并未实现这些功能,都是在应用程序里访问提供这些功能的服务,访问这些服务需要发送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方式请求类型。 (url?name=lisi)
  • HttpPost:Post方式请求类型。 (url,body StringEntity)
    HttpClient发送请求步骤:
  • 创建HttpClient对象
  • 创建Http请求对象
  • 调用HttpClient的execute方法发送请求

2. Get请求方式

<dependency>
    <groupId>com.aliyun.oss</groupId>
    <artifactId>aliyun-sdk-oss</artifactId>
</dependency>

上述依赖的底层已经包含了HttpClient相关依赖。
实现步骤:

  1. 创建HttpClient对象
  2. 创建请求对象
  3. 发送请求,接受响应结果
  4. 解析结果
  5. 关闭资源
package com.sky.test;

import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;


@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);

        //获取服务端返回的状态码   getStatusLine()获取响应行
        int statusCode = response.getStatusLine().getStatusCode();
        System.out.println("服务端返回的状态码为:" + statusCode);

        HttpEntity entity = response.getEntity();//获取响应体

         //借用EntityUtils工具类toString方法将其转为Json字符串
        String body = EntityUtils.toString(entity); 
        System.out.println("服务端返回的数据为:" + body);

        //关闭资源
        response.close();
        httpClient.close();
    }
}

//该请求同样可以封装请求参数,但注意必须使用Map<String,String>
 Map<String,String> map = new HashMap<>();
        map.put("appid",weChatProperties.getAppid());
        map.put("secret",weChatProperties.getSecret());
        map.put("js_code",code);
        map.put("grant_type","authorization_code");
        //发送请求
        String string = HttpClientUtil.doGet(WX_LOGIN, map);
        //解析结果
        String openid = JSONUtil.parseObj(string).getStr("openid");

3. Post请求方式

在HttpClientTest中添加POST方式请求方法,相比GET请求来说,POST请求若携带参数需要封装请求体对象,并将该对象设置在请求对象中。
实现步骤:

  1. 创建HttpClient对象
  2. 创建请求对象
  3. 发送请求,接收响应结果
  4. 解析响应结果
  5. 关闭资源
	/**
     * 测试通过httpclient发送POST方式的请求
     */
    @Test
    public void testPOST() throws Exception{
        // 创建httpclient对象
        CloseableHttpClient httpClient = HttpClients.createDefault();

        //创建请求对象
        HttpPost httpPost = new HttpPost("http://localhost:8080/admin/employee/login");

        //请求体  封装成什么类型无所谓  但是下面调用new StringEntity()封装时
        //必须转为JSON字符串 (与setContentType("application/json")保持一致)
        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();
    }

二、RestTemplate

Template这个后缀的类都是Spring提供的工具类
RestTemplate

在这里插入图片描述

三、Hutool工具包 — HttpUtil

  1. 请求—HttpUtil工具类 这里列举普通的get,post请求
    在这里插入图片描述
  2. 解析
    • java对象转JSON字符串
    • JSON字符串解析

JSON字符串转JSONObject进行解析 。 获取JSON字符串对象属性 getXxx(“属性名”) Xxx为类型


http://www.kler.cn/a/320222.html

相关文章:

  • 用vscode编写verilog时,如何有信号定义提示、信号定义跳转(go to definition)、模块跳转(跨文件跳转)这些功能
  • 前端接入Paymax支付请求
  • 进程其他知识点
  • LeetCode:1. 两数之和
  • 网络基础(3)https和加密
  • thinkphp6模板调用URL方法生成的链接异常
  • Spring Security - 用户授权
  • 1数据结构与算法-前言
  • OpenCV图像文件读写(3)统计多页图像文件中的页面数量函数imcount()的使用
  • 机器学习中的元强化学习
  • Fusion Access
  • 聚焦Llama新场景和AR眼镜,扎克伯格用AI赋能元宇宙,Meta Connect 2024开发者大会直播约起...
  • linux创建固定大小的文件夹用于测试
  • 编译器和解释器
  • 面试真题 | 小红书-C++引擎架构
  • 如何使用ssm实现线上旅游体验系统+vue
  • 【建设方案】智慧工业园区解决方案(PPT)
  • 【SpringCloud】01-远程调用
  • TS系列(2):类型声明、类型推断和类型总览
  • Redis|基础学习
  • 便捷将屏幕投射到安卓/iOS设备-屏幕投射到安卓/iOS设备,Windows/Mac电脑或智能电视上-供大家学习研究参考
  • Android 布局RecyclerView布局介绍
  • 【数据结构】剖析二叉树(Binary Tree)
  • 低代码BPA(业务流程自动化)技术探讨
  • hive窗口函数实现组内求和、累加、排序、计数
  • Flutter路由