赞
踩
Hutool-http针对JDK的HttpUrlConnection做一层封装,简化了HTTPS请求、文件上传、Cookie记忆等操作,使Http请求变得无比简单。其核心类为HttpRequest和HttpResponse。与此同时,Hutool-http针对一些场景封装了HttpUtil工具类,让一些操作变得更简单。
multipart/form-data
表单,不必单做做操作。HttpUtil本质上是对HttpRequest中的一些常用方法的封装,使用起来非常方便。
get方法:HttpUtil.get
- // 最简单的HTTP请求,可以自动通过header等信息判断编码,不区分HTTP和HTTPS
- String 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);
post方法:HttpUtil.post
- HashMap<String, Object> paramMap = new HashMap<>();
- paramMap.put("city", "北京");
-
- String result= HttpUtil.post("https://www.baidu.com", paramMap);
- String result= HttpUtil.post("https://www.baidu.com", paramMap.toString());
post()中传参传的是Map类型的paramMap作为参数时,使用的是form形式进行传参。post()中传参传的是String类型的paramMap.toString()作为参数时,使用的是body形式进行传参。
要根据具体的业务需求和服务器端的接收方式来选择使用form还是body。如果需要将数据以标准的表单形式提交,可以使用form;如果需要传输复杂的数据结构或特定的数据格式,可以使用body。
本质上,HttpUtil中的get和post工具方法都是HttpRequest对象的封装,因此如果想更加灵活操作Http请求,可以使用HttpRequest。
post请求例子:
- String result1 = HttpRequest.post(url)
- .header(Header.USER_AGENT, "Hutool http")//头信息,多个头信息多次调用此方法即可
- .form(paramMap)//表单内容
- .timeout(20000)//超时,毫秒
- .execute().body();
-
- String result2 = HttpRequest.post(url)
- .header(Header.USER_AGENT, "Hutool http")//头信息,多个头信息多次调用此方法即可
- .body(paramMap.toString())//body内容
- .timeout(20000)//超时,毫秒
- .execute().body();
通过链式构建请求,我们可以很方便的指定Http头信息和表单信息,最后调用execute方法即可执行请求,返回HttpResponse对象。HttpResponse包含了服务器响应的一些信息,包括响应的内容和响应的头信息。通过调用body方法即可获取响应内容。
其中form()和body()分别对应HttpUtil中post两种传参方式。
在发送请求时,目标url可能会出现重定向问题,导致获取的返回信息为空。比如对一个需要登陆才能使用的功能url发送请求时,此时没有先发送登录请求的话,可能目标url会自动将url重定向到登录url。
如图所示:请求URL被重定向到了登录界面Location。此时可能获取不到任何返回信息。
HttpUtil中有一个方法createGet()可以解决这个问题。方法定义如下:
- public static HttpRequest createGet(String url, boolean isFollowRedirects) {
- return HttpRequest.get(url).setFollowRedirects(isFollowRedirects);
- }
包含两个参数,url和isFollowRedirects。如果目标url发生了重定向,可以将isFollowRedirects设置为true。使用方法如下:
- String result = HttpUtil.createGet(url,true)
- .header(Header.COOKIE,cookie)
- .body(param.toString())
- .execute().body();
这样就可以获取目标url在重定向之前返回的信息。
Hutool-http官方文档:概述 (hutool.cn)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。