Hutool之Http工具类使用
最早接触Hutool这个集常用工具类为一体的框架工具包是在2018年的时候(酒店业务需要调用第三方门锁API)。
而后19年因为业务接触到Bmob云,开始写对Bmob云的API,于是便有了这篇文章Hutool工具类之HttpUtil使用Https
最近针对业务,再次用到这个。这次涉及到不同单个服务之间的调用,通信方式还是HTTP为主。
针对最近常用的,做了一些总结。
二、应用场景
- (1)调用第三方服务API(第三方服务通常支持HTTP、WebService,一般HTTP比较多);
- (2)单体应用服务之间的服务调用;
- (3)分布式服务之间的服务调用;
二、HttpUtil
官方文档地址:
https://hutool.cn/docs/#/http/Http%E5%AE%A2%E6%88%B7%E7%AB%AF%E5%B7%A5%E5%85%B7%E7%B1%BB-HttpUtil
大家可以做个参考。
1.Get请求
String apiData = HttpUtil.get(url); String apiData = HttpUtil.get(url,timeout); String apiData = HttpUtil.get(url,paramMap); String apiData = HttpUtil.get(url,paramMap,timeout); String apiData = HttpUtil.createGet(url) .execute().body();
2.Post请求
String apiData = HttpUtil.post(url,body); String apiData = HttpUtil.post(url,body,timeout); String apiData =HttpUtil.post(url,paramMap,timeout); String apiData =HttpUtil.post(url,paramMap); String apiData = HttpUtil.createPost(url) .body(reqDto.toString()) .execute().body();
至于apiData如何由String转成JSON格式化,可通过Hutools自带的JSONObject对象或者JSONArray对象进行转换。
例子如下(以我调用博客园API为例):
private String getToken() { String url = "https://api.cnblogs.com/token";//请求接口地址 Map<String, Object> paramMap = new HashMap<>(); paramMap.put("client_id", ClientId); paramMap.put("client_secret", ClientSecret); paramMap.put("grant_type", "client_credentials"); String result = HttpUtil.post(url, paramMap); JSONObject jsonObject = new JSONObject(result); return "Bearer " + jsonObject.getStr("access_token"); }
上面是针对单一JSONObject对象,下面还有针对数组是如何拿到具体的元素(这里是我对接博客园API代码,拿到博客园各个博主的名称,然后根据名称去匹配URL,实现批量数据抓取):
try { Integer pageMaxSize = 200; Integer pageSize = 30; for (int pageParentIndex = 0; pageParentIndex < pageMaxSize; pageParentIndex++) { String homeApiPageData = cnBlogApiService.getSiteHomePostList(pageParentIndex, pageSize); JSONArray getHomeApiPageData = new JSONArray(homeApiPageData); if (getHomeApiPageData.size() > 0) { for (int i = 1; i < getHomeApiPageData.size(); i++) { JSONObject jsonObject = getHomeApiPageData.getJSONObject(i); this.executeCnBlogsImportDataTask(jsonObject.getStr("BlogApp")); } } } return ResponseBaseDTO.createSuccResp(1); } catch (Exception e) { logger.error("/cnblogs/singleImport", e); return ResponseBaseDTO.createFailResp(e.getMessage()); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述
2017-11-21 Linux系统学习之软件安装