(1)maven 依赖:

<!-- HttpClinet 核心包 -->
<dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.13</version>
</dependency>
<!-- HttpClinet 请求时,涉及文件上传需要的包 -->
<dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpmime</artifactId><version>4.5.13</version>
</dependency>

( 2 )工具类代码

package com.unisoc.releaseCenter.utils;import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Objects;import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.entity.mime.content.StringBody;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;/*** HttpClient工具类** @author ZhangYuanqiang* @since 2021-06-10*/
public class HttpUtils {/*** 字符编码*/private final static String UTF8 = "utf-8";/*** 字节流数组大小(1MB)*/private final static int BYTE_ARRAY_LENGTH = 1024 * 1024;/*** 执行get请求获取响应** @param url 请求地址* @return 响应内容*/public static String get(String url) {return get(url, null);}/*** 执行get请求获取响应** @param url     请求地址* @param headers 请求头参数* @return 响应内容*/public static String get(String url, Map<String, String> headers) {HttpGet get = new HttpGet(url);return getRespString(get, headers);}/*** 执行post请求获取响应** @param url 请求地址* @return 响应内容*/public static String post(String url) {return post(url, null, null);}/*** 执行post请求获取响应** @param url    请求地址* @param params 请求参数* @return 响应内容*/public static String post(String url, Map<String, String> params) {return post(url, null, params);}/*** 执行post请求获取响应** @param url     请求地址* @param headers 请求头参数* @param params  请求参数* @return 响应内容*/public static String post(String url, Map<String, String> headers, Map<String, String> params) {HttpPost post = new HttpPost(url);post.setEntity(getHttpEntity(params));return getRespString(post, headers);}/*** 执行post请求获取响应(请求体为JOSN数据)** @param url  请求地址* @param json 请求的JSON数据* @return 响应内容*/public static String postJson(String url, String json) {return postJson(url, null, json);}/*** 执行post请求获取响应(请求体为JOSN数据)** @param url     请求地址* @param headers 请求头参数* @param json    请求的JSON数据* @return 响应内容*/public static String postJson(String url, Map<String, String> headers, String json) {HttpPost post = new HttpPost(url);post.setHeader("Content-type", "application/json");post.setEntity(new StringEntity(json, UTF8));return getRespString(post, headers);}/*** 执行post请求获取响应(请求体包含文件)** @param url    请求地址* @param params 请求参数(文件对应的value传File对象)* @return 响应内容*/public static String postFile(String url, Map<String, Object> params) {return postFile(url, null, params);}/*** 执行post请求获取响应(请求体包含文件)** @param url     请求地址* @param headers 请求头参数* @param params  请求参数(文件对应的value传File对象)* @return 响应内容*/public static String postFile(String url, Map<String, String> headers, Map<String, Object> params) {HttpPost post = new HttpPost(url);MultipartEntityBuilder builder = MultipartEntityBuilder.create();if (Objects.nonNull(params) && !params.isEmpty()) {for (Entry<String, Object> entry : params.entrySet()) {String key = entry.getKey();Object value = entry.getValue();if (Objects.isNull(value)) {builder.addPart(key, new StringBody("", ContentType.TEXT_PLAIN));} else {if (value instanceof File) {builder.addPart(key, new FileBody((File) value));} else {builder.addPart(key, new StringBody(value.toString(), ContentType.TEXT_PLAIN));}}}}HttpEntity entity = builder.build();post.setEntity(entity);return getRespString(post, headers);}/*** 下载文件** @param url      下载地址* @param path     保存路径(如:D:/images,不传默认当前工程根目录)* @param fileName 文件名称(如:hello.jpg)*/public static void download(String url, String path, String fileName) {HttpGet get = new HttpGet(url);File dir = new File(path);if (!dir.exists()) {dir.mkdirs();}String filePath = null;if (Objects.isNull(path) || path.isEmpty()) {filePath = fileName;} else {if (path.endsWith("/")) {filePath = path + fileName;} else {filePath += path + "/" + fileName;}}File file = new File(filePath);if (!file.exists()) {try {file.createNewFile();} catch (IOException e) {e.printStackTrace();}}try (FileOutputStream fos = new FileOutputStream(file); InputStream in = getRespInputStream(get, null)) {if (Objects.isNull(in)) {return;}byte[] bytes = new byte[BYTE_ARRAY_LENGTH];int len = 0;while ((len = in.read(bytes)) != -1) {fos.write(bytes, 0, len);}} catch (Exception e) {e.printStackTrace();}}/*** 获取请求体HttpEntity** @param params 请求参数* @return HttpEntity*/private static HttpEntity getHttpEntity(Map<String, String> params) {List<BasicNameValuePair> pairs = new ArrayList<BasicNameValuePair>();for (Entry<String, String> entry : params.entrySet()) {pairs.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));}HttpEntity entity = null;try {entity = new UrlEncodedFormEntity(pairs, UTF8);} catch (UnsupportedEncodingException e) {e.printStackTrace();}return entity;}/*** 设置请求头** @param request 请求对象* @param headers 请求头参数*/private static void setHeaders(HttpUriRequest request, Map<String, String> headers) {if (Objects.nonNull(headers) && !headers.isEmpty()) {// 请求头不为空,则设置对应请求头for (Entry<String, String> entry : headers.entrySet()) {request.setHeader(entry.getKey(), entry.getValue());}} else {// 请求为空时,设置默认请求头request.setHeader("Connection", "keep-alive");request.setHeader("Accept-Encoding", "gzip, deflate, br");request.setHeader("Accept", "*/*");request.setHeader("User-Agent","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36");}}/*** 执行请求,获取响应流** @param request 请求对象* @return 响应内容*/private static InputStream getRespInputStream(HttpUriRequest request, Map<String, String> headers) {// 设置请求头setHeaders(request, headers);// 获取响应对象HttpResponse response = null;try {response = HttpClients.createDefault().execute(request);} catch (Exception e) {e.printStackTrace();return null;}// 获取Entity对象HttpEntity entity = response.getEntity();// 获取响应信息流InputStream in = null;if (Objects.nonNull(entity)) {try {in = entity.getContent();} catch (Exception e) {e.printStackTrace();}}return in;}/*** 执行请求,获取响应内容** @param request 请求对象* @return 响应内容*/private static String getRespString(HttpUriRequest request, Map<String, String> headers) {byte[] bytes = new byte[BYTE_ARRAY_LENGTH];int len = 0;try (InputStream in = getRespInputStream(request, headers);ByteArrayOutputStream bos = new ByteArrayOutputStream()) {if (Objects.isNull(in)) {return "";}while ((len = in.read(bytes)) != -1) {bos.write(bytes, 0, len);}return bos.toString(UTF8);} catch (Exception e) {e.printStackTrace();}return "";}}

Java工具类:HttpUtil(HttpClient实现http的请求,获取响应)相关推荐

  1. (6)常用的Java工具类

    目录 前言: 第一部分:常用的16个工具类 一.org.apache.commons.io.IOUtils 二.org.apache.commons.io.FileUtils 三.org.apache ...

  2. 干货:排名前 16 的 Java 工具类!

    2019独角兽企业重金招聘Python工程师标准>>> 干货:排名前 16 的 Java 工具类!   在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最 ...

  3. 排名前 16 的 Java 工具类

    转载来自微信公众号:Java 技术栈.如有侵权,请联系作者删除!! 在 Java 中,工具类定义了一组公共方法,这篇文章将介绍 Java 中使用最频繁及最通用的 Java 工具类.以下工具类.方法按使 ...

  4. beanutils工具类_16 个超级实用的 Java 工具类!

    在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类.以下工具类.方法按使用流行度排名,参考数据来源于Github上随机选取的5万个开源项目源码. 一. ...

  5. java轻量级并行工具类_16 个超级实用的 Java 工具类

    原标题:16 个超级实用的 Java 工具类 源 /juejin 在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类.以下工具类.方法按使用流行度排名, ...

  6. Java工具类——UUIDUtils

    借用一下百度百科的解释,来看一下UUID是什么. UUID含义是通用唯一识别码 (Universally Unique Identifier),这 是一个软件建构的标准,也是被开源软件基金会 (Ope ...

  7. java 文本工具类_干货:排名前16的Java工具类

    原标题:干货:排名前16的Java工具类 作者丨Java技术栈 https://www.jianshu.com/p/9e937d178203 在Java中,工具类定义了一组公共方法,这篇文章将介绍Ja ...

  8. 干货:排名前16的Java工具类

    image 在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类.以下工具类.方法按使用流行度排名,参考数据来源于Github上随机选取的5万个开源项目源 ...

  9. Java工具类——通过配置XML验证Map

    Java工具类--通过配置XML验证Map 背景 在JavaWeb项目中,接收前端过来的参数时通常是使用我们的实体类进行接收的.但是呢,我们不能去决定已经搭建好的框架是怎么样的,在我接触的框架中有一种 ...

最新文章

  1. 从未在一起更让人遗憾_明明是真爱,却又不能在一起
  2. 马路上的“懦夫游戏”和比特币现金共识升级冲突
  3. 2008R2 AD 域的安装
  4. 开发日记-20190522 关键词 读书笔记《鸟哥的Linux私房菜-基础学习篇》
  5. Ubuntu开机后一直循环登录,却进不去桌面
  6. matlab 文件路径问题
  7. linux 进程间通信 命名管道FIFO的原理与使用
  8. python3 json模块_详解python 3.6 安装json 模块(simplejson)
  9. JavaScript组成
  10. Git pull(拉取),push(上传)命令整理
  11. iOS正确获取时间戳的代码
  12. 使用js实现画笔功能
  13. lammps教程:薄膜渗透过滤模拟--平衡弛豫过程
  14. 方差、协方差和皮尔森相关系数
  15. linux ubuntu 五笔输入法,ubuntu16.04 安装五笔输入法
  16. series 锐捷rgrsr20_锐捷路由器(RG-RSR20-04)清除密码的方法详解
  17. 赵小楼《天道》《遥远的救世主》深度解析(38)丁元英的“自嘲”和作者豆豆的深意
  18. java ole excel_用OLE操作Excel
  19. BUUCTF VoIP
  20. 重叠社区检测基础算法

热门文章

  1. 去除字符串中的空格(C语言)
  2. Python入门-多线程
  3. 败光370亿后,聚美优品踏上新的不归路?
  4. 第6课:郭盛华课程_VB编程之TextBox控件的使用方法
  5. java课程设计总结迷宫_java课设走迷宫(含代码)#优质参考
  6. 在Echarts的barChart中,xAxis的axisLabel中,interval参数如何解释?
  7. 在Linux中进行端口映射问题
  8. Jupyter Notebook的基本使用
  9. Win11家庭版安装.net framework 3.5的方法
  10. 筛多肽(水解,活性预测,毒性预测,过敏性预测....)