概述 HttpUtil是应对简单场景下Http请求的工具类封装,此工具封装了HttpRequest对象常用操作,可以保证在一个方法之内完成Http请求。 此模块基于jdk的HttpUrlConnect
HttpUtil是应对简单场景下Http请求的工具类封装,此工具封装了HttpRequest对象常用操作,可以保证在一个方法之内完成Http请求。
此模块基于jdk的HttpUrlConnection封装完成,完整支持https、代理和文件上传。
<dependency> <groupId>cn.hutoolgroupId> <artifactId>hutool-allartifactId> <version>5.7.1version> dependency>
针对最为常用的GET和POST请求,HttpUtil封装了两个方法,
// 最简单的HTTP请求,可以自动通过header等信息判断编码,不区分HTTP和HTTPSString result1= HttpUtil.get("https://www.baidu.com");// 当无法识别页面编码的时候,可以自定义请求页面的编码String result2= HttpUtil.get("https://www.baidu.com", CharsetUtil.CHARSET_UTF_8);//可以单独传入http参数,这样参数会自动做URL编码,拼接在URL中HashMap<String, Object> paramMap = new HashMap<>();paramMap.put("city", "北京");String result3= HttpUtil.get("https://www.baidu.com", paramMap);
返回结果:
HashMap<String, Object> paramMap = new HashMap<>();paramMap.put("city", "北京");String result= HttpUtil.post("https://www.baidu.com", paramMap);
HashMap<String, Object> paramMap = new HashMap<>();//文件上传只需将参数中的键指定(默认file),值设为文件对象即可,对于使用者来说,文件上传与普通表单提交并无区别paramMap.put("file", FileUtil.file("D:\\face.jpg"));String result= HttpUtil.post("https://www.baidu.com", paramMap);
因为Hutool-http机制问题,请求页面返回结果是一次性解析为byte[]的,如果请求URL返回结果太大(比如文件下载),那内存会爆掉,因此针对文件下载HttpUtil单独做了封装。文件下载在面对大文件时采用流的方式读写,内存中只是保留一定量的缓存,然后分块写入硬盘,因此大文件情况下不会对内存有压力。
String fileUrl = "http://mirrors.sohu.com/Centos/8.4.2105/isos/x86_64/CentOS-8.4.2105-x86_64-dvd1.iso";//将文件下载后保存在E盘,返回结果为下载文件大小long size = HttpUtil.downloadFile(fileUrl, FileUtil.file("e:/"));System.out.println("Download size: " + size);
当然,如果我们想感知下载进度,还可以使用另一个重载方法回调感知下载进度:
//带进度显示的文件下载HttpUtil.downloadFile(fileUrl, FileUtil.file("e:/"), new StreamProgress(){ @Override public void start() { Console.log("开始下载。。。。"); } @Override public void progress(long progressSize) { Console.log("已下载:{}", FileUtil.readableFileSize(progressSize)); } @Override public void finish() { Console.log("下载完成!"); }});
本质上,HttpUtil中的get和post工具方法都是HttpRequest对象的封装,因此如果想更加灵活操作Http请求,可以使用HttpRequest。
public static JSONObject get(String url, Map<String, Object> queryParams, Map<String, String> headers) throws IOException { String body = HttpRequest.get(url).form(queryParams).addHeaders(headers).execute().body(); return jsONObject.parseObject(body); }
public static JSONObject post(String url, Map<String, Object> queryParams, Map<String, String> headers) { String body = HttpRequest.post(url) .header(Header.USER_AGENT, "Hutool http")//头信息,多个头信息多次调用此方法即可 .form(queryParams)//表单内容 .timeout(20000)//超时,毫秒 .execute().body(); return JSONObject.parseObject(body); }
public static JSONObject post(String url, String json, Map<String, String> headers) { String body = HttpRequest.post(url).body(json).addHeaders(headers).execute().body(); return JSONObject.parseObject(body); }
String result2 = HttpRequest.post(url) .setHttpProxy("127.0.0.1", 9080) .body(json) .execute().body();
来源地址:https://blog.csdn.net/qq_41694906/article/details/132355739
--结束END--
本文标题: Java请求Http接口-hutool的HttpUtil(超详细-附带工具类)
本文链接: https://www.lsjlt.com/news/393438.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-04-03
2024-04-03
2024-04-01
2024-01-21
2024-01-21
2024-01-21
2024-01-21
2023-12-23
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0