(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. 剑指offer:面试题39. 数组中出现次数超过一半的数字
  2. 【BZOJ 3620】 3620: 似乎在梦中见过的样子 (KMP)
  3. textarea选中行删除_Vim、gvim操作花样删除
  4. 利用多线程提高程序性能(for Android)
  5. sql优化常用的几种方法_Hive常用性能优化方法实践全面总结
  6. mysql主主同步稳定吗_MySQL主主同步
  7. xstream-0 使用入门
  8. 新浪微博王传鹏:微博推荐架构的演进
  9. Android loader 详解
  10. RISV-Reader小结
  11. 细胞迁移 | cell migration
  12. 整理了百大框架排行榜
  13. Kubernetes学习-K8S安装篇-Kubeadm安装高可用K8S集群
  14. 购买电脑时,关于CPU和显卡
  15. 柴胡加龙骨牡蛎汤去大黄合当归芍药散治顽固心悸案(李跃海)
  16. OpenCV各模块函数使用实例(5)--特征检测(Feature Detection)
  17. OPJ1002 方便记忆的电话号码
  18. 计算机网络基础知识及应用教学视频,计算机网络基础教程介绍以及视频讲解
  19. 014 | JavaWeb物流配货项目源码 | 大学生毕业设计 | 极致技术工厂
  20. 服务器2003修复请按r键,启动xp系统提示“文件丢失按R修复”怎么回事

热门文章

  1. WINDOWS 2000下如何获得用户登录名和密码
  2. C语言小游戏“剪刀石头布”
  3. 关于查询二级分类的简单方法
  4. mht 转换 html java,使用java将网页保存为mht格式(2)
  5. html的text滚条设置,textarea 滚动条属性设置
  6. 发明专利申请的全部流程
  7. int为什么最大值为2^31-1(2的31次方-1)
  8. 系统动力学模型matlab仿真,MATLAB/Simulink动力学系统建模与仿真(带目录)_IT教程网...
  9. jmeter 命令行模式(非GUI)运行脚本,察看结果树结果为空,解决办法;
  10. 亚马逊 ec2 连接不上_在Amazon EC2上轻松进行蓝绿色部署