概述
HttpUtil是應(yīng)對(duì)簡(jiǎn)單場(chǎng)景下Http請(qǐng)求的工具類(lèi)封裝,此工具封裝了HttpRequest對(duì)象常用操作,可以保證在一個(gè)方法之內(nèi)完成Http請(qǐng)求。
此模塊基于JDK的HttpUrlConnection封裝完成,完整支持https、代理和文件上傳。
導(dǎo)包
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.7.1</version>
</dependency>
讀取頁(yè)面,返回整個(gè)頁(yè)面內(nèi)容報(bào)文
針對(duì)最為常用的GET和POST請(qǐng)求,HttpUtil封裝了兩個(gè)方法,
- HttpUtil.get
- HttpUtil.post
這兩個(gè)方法用于請(qǐng)求普通頁(yè)面,然后返回頁(yè)面內(nèi)容的字符串,同時(shí)提供一些重載方法用于指定請(qǐng)求參數(shù)(指定參數(shù)支持File對(duì)象,可實(shí)現(xiàn)文件上傳,當(dāng)然僅僅針對(duì)POST請(qǐng)求)。
get 請(qǐng)求頁(yè)面
// 最簡(jiǎn)單的HTTP請(qǐng)求,可以自動(dòng)通過(guò)header等信息判斷編碼,不區(qū)分HTTP和HTTPS
String result1= HttpUtil.get("https://www.baidu.com");
// 當(dāng)無(wú)法識(shí)別頁(yè)面編碼的時(shí)候,可以自定義請(qǐng)求頁(yè)面的編碼
String result2= HttpUtil.get("https://www.baidu.com", CharsetUtil.CHARSET_UTF_8);
//可以單獨(dú)傳入http參數(shù),這樣參數(shù)會(huì)自動(dòng)做URL編碼,拼接在URL中
HashMap<String, Object> paramMap = new HashMap<>();
paramMap.put("city", "北京");
String result3= HttpUtil.get("https://www.baidu.com", paramMap);
返回結(jié)果:
post 請(qǐng)求頁(yè)面
HashMap<String, Object> paramMap = new HashMap<>();
paramMap.put("city", "北京");
String result= HttpUtil.post("https://www.baidu.com", paramMap);
上傳文件
HashMap<String, Object> paramMap = new HashMap<>();
//文件上傳只需將參數(shù)中的鍵指定(默認(rèn)file),值設(shè)為文件對(duì)象即可,對(duì)于使用者來(lái)說(shuō),文件上傳與普通表單提交并無(wú)區(qū)別
paramMap.put("file", FileUtil.file("D:\\face.jpg"));
String result= HttpUtil.post("https://www.baidu.com", paramMap);
下載文件
因?yàn)镠utool-http機(jī)制問(wèn)題,請(qǐng)求頁(yè)面返回結(jié)果是一次性解析為byte[]的,如果請(qǐng)求URL返回結(jié)果太大(比如文件下載),那內(nèi)存會(huì)爆掉,因此針對(duì)文件下載HttpUtil單獨(dú)做了封裝。文件下載在面對(duì)大文件時(shí)采用流的方式讀寫(xiě),內(nèi)存中只是保留一定量的緩存,然后分塊寫(xiě)入硬盤(pán),因此大文件情況下不會(huì)對(duì)內(nèi)存有壓力。
String fileUrl = "http://mirrors.sohu.com/centos/8.4.2105/isos/x86_64/CentOS-8.4.2105-x86_64-dvd1.iso";
//將文件下載后保存在E盤(pán),返回結(jié)果為下載文件大小
long size = HttpUtil.downloadFile(fileUrl, FileUtil.file("e:/"));
System.out.println("Download size: " + size);
當(dāng)然,如果我們想感知下載進(jìn)度,還可以使用另一個(gè)重載方法回調(diào)感知下載進(jìn)度:文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-657899.html
//帶進(jìn)度顯示的文件下載
HttpUtil.downloadFile(fileUrl, FileUtil.file("e:/"), new StreamProgress(){
@Override
public void start() {
Console.log("開(kāi)始下載。。。。");
}
@Override
public void progress(long progressSize) {
Console.log("已下載:{}", FileUtil.readableFileSize(progressSize));
}
@Override
public void finish() {
Console.log("下載完成!");
}
});
其他方法
- HttpUtil.encodeParams 對(duì)URL參數(shù)做編碼,只編碼鍵和值,提供的值可以是url附帶參數(shù),但是不能只是url
- HttpUtil.toParams和HttpUtil.decodeParams 兩個(gè)方法是將Map參數(shù)轉(zhuǎn)為URL參數(shù)字符串和將URL參數(shù)字符串轉(zhuǎn)為Map對(duì)象
- HttpUtil.urlWithForm是將URL字符串和Map參數(shù)拼接為GET請(qǐng)求所用的完整字符串使用
- HttpUtil.getMimeType 根據(jù)文件擴(kuò)展名快速獲取其MimeType(參數(shù)也可以是完整文件路徑)
resul 接口
本質(zhì)上,HttpUtil中的get和post工具方法都是HttpRequest對(duì)象的封裝,因此如果想更加靈活操作Http請(qǐng)求,可以使用HttpRequest。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-657899.html
get請(qǐng)求
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);
}
post 表單請(qǐng)求
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")//頭信息,多個(gè)頭信息多次調(diào)用此方法即可
.form(queryParams)//表單內(nèi)容
.timeout(20000)//超時(shí),毫秒
.execute().body();
return JSONObject.parseObject(body);
}
post -json 請(qǐng)求
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();
到了這里,關(guān)于Java請(qǐng)求Http接口-hutool的HttpUtil(超詳細(xì)-附帶工具類(lèi))的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!