Hutool-http是什么

简介

Hutool-http针对JDK的HttpUrlConnection做一层封装,简化了HTTPS请求、文件上传、Cookie记忆等操作,使Http请求变得无比简单。其核心类为HttpRequest和HttpResponse。与此同时,Hutool-http针对一些场景封装了HttpUtil工具类,让一些操作变得更简单。

优点

根据URL自动判断是请求HTTP还是HTTPS,不需要单独写多余的代码。表单数据中有File对象时自动转为multipart/form-data表单,不必单做做操作。默认情况下Cookie自动记录,比如可以实现模拟登录,即第一次访问登录URL后后续请求就是登录状态。自动识别304跳转并二次请求自动识别页面编码,即根据header信息或者页面中的相关标签信息自动识别编码,最大可能避免乱码。自动识别并解压Gzip格式返回内容

Hutool-http的使用

HttpUtil工具类

HttpUtil本质上是对HttpRequest中的一些常用方法的封装,使用起来非常方便。

get和post例子

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 paramMap = new HashMap<>();

paramMap.put("city", "北京");

String result3= HttpUtil.get("https://www.baidu.com", paramMap);

post方法:HttpUtil.post

HashMap 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。

HttpRequest的使用

本质上,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。

 如图所示:请求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)

推荐文章

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: