Java 请求头加header

Java 请求头加header


通常情况下,java的http请求接口可以无需加header,但也有的第三方接口强制要求将accesstoken放在请求头中,而不能作为普通参数传递,这样就需要在请求头中加header,这里写了几个http请求工具类的方法,希望对大家有帮助

/*** @Description 可以添加headers 的请求工具类* @Author P001* @Date 2023/3/3 15:06* @Version 1.0*/public class HttpUtilsV2 {private static final CloseableHttpClient httpclient = HttpClients.createDefault();private static final Logger log = LoggerFactory.getLogger(HttpUtilsV2.class);private static final String userAgent = "Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.87 Safari/537.36";/*** 发送HttpGet请求** @param url   url* @param param param* @return 返回字符串*/public static String sendGet(String url, String param, Map<String,String> headers) {String result = null;CloseableHttpResponse response = null;try {String urlNameString = url + "?" + param;log.info("sendGet - {}", urlNameString);HttpGet httpGet = new HttpGet(urlNameString);httpGet.setHeader("User-Agent", userAgent);if (Objects.nonNull(headers)) {Set<Map.Entry<String, String>> entries = headers.entrySet();if (CollectionUtils.isNotEmpty(entries)) {for (Map.Entry<String, String> entry : entries) {httpGet.setHeader(entry.getKey(), entry.getValue());}}}response = httpclient.execute(httpGet);HttpEntity entity = response.getEntity();if (entity != null) {result = EntityUtils.toString(entity);}} catch (Exception e) {log.error(e.getMessage());} finally {if (response != null) {try {response.close();} catch (IOException e) {log.error(e.getMessage());}}}return result;}/*** 发送HttpGet请求* 如果使用此方法,记得在finally中关闭response* @param url   url* @return 返回字符串*/public static CloseableHttpResponse sendGet(String url) {CloseableHttpResponse response = null;try {log.info("sendGet - {}", url);HttpGet httpGet = new HttpGet(url);response = httpclient.execute(httpGet);} catch (Exception e) {log.error(e.getMessage());}return response;}/*** 发送HttpPost请求** @param url     url* @param jsonStr 入参* @return 返回字符串*/public static String sendPost(String url, String jsonStr) {String result = null;// 字符串编码StringEntity entity = new StringEntity(jsonStr, Consts.UTF_8);// 设置content-typeentity.setContentType("application/json");HttpPost httpPost = new HttpPost(url);// 防止被当成攻击添加的httpPost.setHeader("User-Agent", userAgent);// 接收参数设置httpPost.setHeader("Accept", "application/json");httpPost.setEntity(entity);CloseableHttpResponse response = null;try {response = httpclient.execute(httpPost);HttpEntity httpEntity = response.getEntity();result = EntityUtils.toString(httpEntity);} catch (IOException e) {log.error(e.getMessage());} finally {// 关闭CloseableHttpResponseif (response != null) {try {response.close();} catch (IOException e) {log.error(e.getMessage());}}}return result;}/*** 发送HttpPost请求** @param url url* @return 返回字符串*/public static String sendPost(String url) {String result = null;// 得到一个HttpPost对象HttpPost httpPost = new HttpPost(url);// 防止被当成攻击添加的httpPost.setHeader("User-Agent", userAgent);CloseableHttpResponse response = null;try {// 执行HttpPost请求,并得到一个CloseableHttpResponseresponse = httpclient.execute(httpPost);// 从CloseableHttpResponse中拿到HttpEntityHttpEntity entity = response.getEntity();// 将HttpEntity转换为字符串result = EntityUtils.toString(entity);} catch (IOException e) {log.error(e.getMessage());} finally {// 关闭CloseableHttpResponseif (response != null) {try {response.close();} catch (IOException e) {log.error(e.getMessage());}}}return result;}}

另外也可以基于当前请求工具类获取远程资源文件并下载到本地,比如资源路径:

https://kefu.test.com/store/func/imagetrans/image2.php?f=o7AyJtNijflDAP1RHWeTarsltMgvRHX9Kg&amp;amp;q=+LcyJNcy3PxABvhVGmeSbaR45KcjXzSkYtemrW3XSgPEcmFV9cDIGhYjkw2ryK+hPHa29q1VhgYHJA4ckaNcT2dmIhHQSjBLJ9F0NHo

作为参数传入下方法即可将远程资源文件下载到本地临时文件夹,同时将本地临时文件夹内容读取上传至腾讯云COS

/*** 获取小能资源文件* @return*/@Overridepublic String getSourceFile(String url, Date date) {String key = null;InputStream instream = null;CloseableHttpResponse response = null;FileOutputStream out = null;String tmppath = null;try {response = HttpUtilsV2.sendGet(url);if (Objects.nonNull(response)) {HttpEntity entity = response.getEntity();//获取文件后缀名Header header = entity.getContentType();String value = header.getValue();int i = value.lastIndexOf("/");String ext = value.substring(i + 1);//文件存储路径Calendar calendar = Calendar.getInstance();calendar.setTime(date);int year = calendar.get(Calendar.YEAR);int month = calendar.get(Calendar.MONTH) + 1;int day = calendar.get(Calendar.DAY_OF_MONTH);String folderName = String.format("%s/%s/%s/%s/", ConstantConfig.path, year, month, day);Random random = new Random();String fileName = date.getTime()+ random.nextInt(100000)+"."+ext;//先下载到本地,然后再读取,上传到costmppath = ConstantConfig.tmpPath + fileName;//判断是否存在文件,不存在则新建File file = new File(ConstantConfig.tmpPath);if (!file.exists()) {file.mkdirs();}out = new FileOutputStream(tmppath);entity.writeTo(out);//再次读取上传到cosinstream = new FileInputStream(tmppath);key = folderName + fileName;CosClientUtil.uploadFileToCos(instream,key);}} catch (IOException e) {e.printStackTrace();}finally {try {if (instream != null) {instream.close();}if (response != null) {response.close();}if (out != null) {out.close();}if (tmppath != null) {new File(tmppath).delete();}} catch (IOException e) {e.printStackTrace();}}return key;}

当然也可以不经过下载到本地临时目录再上传的方式直接将远程资源文件上传到腾讯云COS

  /*** 获取小能资源文件* @return*/@Overridepublic String getSourceFile(String url, Date date) {String key = null;InputStream instream = null;HttpClient client = new HttpClient();GetMethod get = null;try {get = new GetMethod(url);int httpStatus = client.executeMethod(get);if (HttpStatus.OK.value() == httpStatus) {// 得到网络资源的字节数组,并写入文件byte[] result = get.getResponseBody();instream = new ByteArrayInputStream(result);org.apache.commons.httpclient.Header header = get.getResponseHeader("Content-Type");String value = header.getValue();int i = value.lastIndexOf("/");String ext = value.substring(i + 1);//文件存储路径Calendar calendar = Calendar.getInstance();calendar.setTime(date);int year = calendar.get(Calendar.YEAR);int month = calendar.get(Calendar.MONTH) + 1;int day = calendar.get(Calendar.DAY_OF_MONTH);String folderName = String.format("%s/%s/%s/%s/", ConstantConfig.path, year, month, day);Random random = new Random();String fileName = date.getTime()+ random.nextInt(100000)+"."+ext;key = folderName + fileName;CosClientUtil.uploadFileToCos(instream,key);}} catch (IOException e) {e.printStackTrace();}finally {try {if (instream != null) {instream.close();}if (get != null) {get.releaseConnection();}client.getHttpConnectionManager().closeIdleConnections(0);} catch (IOException e) {e.printStackTrace();}}return key;}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/25790.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

矩阵杯2024 Re wp 前两题

1. packpy UPX壳&#xff0c;但不能直接脱&#xff0c;应该是修改了头文件&#xff08;l_info) 改一下就能脱了 脱完是个elf文件 进IDA看一眼 明显的Py打包标志&#xff0c;用pyinstxtractor解包出来&#xff08;最好用对应的python3.8&#xff09; 可以得到packpy.pyc文件&a…

Prov-GigaPath:新型数字病理基础模型|顶刊精析·2024-06-10

小罗碎碎念 顶刊精析&#xff5c;2024-06-10 首先祝各位老师、师兄师姐、师弟师妹们端午节快乐&#xff01;&#xff01;小罗是社恐&#xff0c;所以就不一一发消息问候了&#xff0c;哈哈。 今天这篇推文是昨天下午写完的&#xff0c;想着时间有点晚了&#xff0c;所以就放到…

java发送http请求工具类-简单易懂

简介 在Java开发中&#xff0c;我们经常需要发送HTTP请求来获取数据或与外部系统进行交互。Hutool是一个Java工具类库&#xff0c;提供了丰富的工具方法&#xff0c;其中包括发送HTTP请求的工具类。使用Hutool发送HTTP请求非常简单&#xff0c;不仅可以发送GET和POST请求&#…

作业07 递推算法2

作业&#xff1a; #include <iostream> using namespace std; int main(){int a[110][110]{0},b[110][110]{0},n;cin>>n;for(int i1;i<n;i){for(int j1;j<i;j){cin>>a[i][j];}}for(int in-1;i>1;i--){for(int j1;j<i;j){a[i][j]a[i][j]max(a[i1]…

SpringBoot中实现一个通用Excel导出功能

SpringBoot中实现一个通用Excel导出功能 文章目录 SpringBoot中实现一个通用Excel导出功能这个导出功能的特色看效果代码解析1、依赖2、Excel 入参(ExcelExportRequest)3、Excel 出参(ExcelExportResponse)4、ExcelExportField5、ExcelExportUtils 工具类6、ExcelHead 头部…

0元白嫖阿里云4G内存云服务器——感谢伟大的CSDN和阿里云

&#x1f9f8;欢迎来到dream_ready的博客&#xff0c;&#x1f4dc;相信您对博主首页也很感兴趣o (ˉ▽ˉ&#xff1b;) 学生邮箱白嫖/免费安装JetBrains全家桶(IDEA/pycharm等) —— 保姆级教程-CSDN博客 目录 1、学生认证领取300元优惠券 ​2、购买云服务器 1、学生认证领取…

深度学习500问——Chapter10:迁移学习(1)

文章目录 11.1 迁移学习基础知识 11.1.1 什么是迁移学习 11.1.2 为什么需要迁移学习 11.1.3 迁移学习的基本问题有哪些 11.1.4 迁移学习有哪些常用概念 11.1.5 迁移学习与传统机器学习有什么区别 11.1.6 迁移学习的核心及度量准则 11.1.7 迁移学习与其他概念的区别 11.1.8 什么…

【Python】高阶函数

高阶函数 高阶函数是接受另一个函数作为参数&#xff0c;并返回一个函数作为结果的函数。 这种类型的函数是函数式编程的核心&#xff0c;因为它们允许对行为进行抽象和复用&#xff0c;使得代码更加简洁和灵活。 def apply_function(func, value):return func(value)def sq…

MySQL 存储函数及调用

1.mysql 存储函数及调用 在MySQL中&#xff0c;存储函数&#xff08;Stored Function&#xff09;是一种在数据库中定义的特殊类型的函数&#xff0c;它可以从一个或多个参数返回一个值。存储函数在数据库层面上封装了复杂的SQL逻辑&#xff0c;使得在应用程序中调用时更加简单…

tcp协议中机制的总结

目录 总结 分析 三次握手 总结 分析 其中,序列号不止用来排序,还可以用在重传时去重 确认应答是机制中的核心 因为都需要依靠应答来拿到协议字段,从而判断是否触发机制 保证可靠性的策略也可以提高效率,比如: 流量控制,可以根据多个因素来动态调整数据发送量拥塞控制也是,让…

揭开FFT时域加窗的奥秘

FFT – Spectral Leakage 假设用于ADC输出数据分析的采样点数为N&#xff0c;而采样率为Fs&#xff0c;那我们就知道&#xff0c;这种情况下的FFT频谱分辨率为δf&#xff0c;那么δfFs/N。如果此时我们给ADC输入一个待测量的单频Fin&#xff0c;如果此时Fin除以δf不是整数&a…

Follow Carl To Grow|【LeetCode】235. 二叉搜索树的最近公共祖先,701.二叉搜索树中的插入操作,450.删除二叉搜索树中的节点

【LeetCode】235. 二叉搜索树的最近公共祖先 题意&#xff1a;给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个结点 p、q&#xff0c;最近公共祖先表示为一个结点 x&#xff0c;满足 x 是 p、q…

翻译《The Old New Thing》- Why do messages posted by PostThreadMessage disappear?

Why do messages posted by PostThreadMessage disappear? - The Old New Thing (microsoft.com)https://devblogs.microsoft.com/oldnewthing/20090930-00/?p16553 Raymond Chen 2008年09月30日 为什么 PostThreadMessage 发布的信息会消失&#xff1f; 在显示用户界面的线…

mybatis-plus 多租户方案1使用和坑注意事项,方案是需要实现租户功能的表都增加租户id字段

1 前提springboot整合好 mybatis-plus (版本3.5.4) 需要实现多租户的表&#xff0c;添加修改对应字段和 pojo类 (表添加tenant_id字段&#xff0c;pojo添加tenantId属性) 2 配置文件更改&#xff0c;方便扩展 #多租户配置 tenant:enable: truecolumn: tenant_idignoreTable…

【Java】网制焦,实也难,0基础,学反射

【Java】网制焦&#xff0c;实也难&#xff0c;0基础&#xff0c;学反射 文章目录 【Java】网制焦&#xff0c;实也难&#xff0c;0基础&#xff0c;学反射反射的概述 获取Class对象的三种方式通过对象的getClass()方法通过类的静态属性class通过Class.forName()方法 通过反射获…

代码随想录算法训练营第三十三天|LeetCode1005 k次取反后最大化的数组和、LeetCode134 加油站

题1&#xff1a; 指路&#xff1a;1005. K 次取反后最大化的数组和 - 力扣&#xff08;LeetCode&#xff09; 思路与代码&#xff1a; 题意清晰&#xff0c;需要注意的是需要把k次机会用完。数组中的数分为三种情况&#xff1a;正数&#xff0c;负数&#xff0c;0。要求数组…

《平凡的世界》读后感:走进平凡的世界

《平凡的世界》是一部充满人性光辉的小说&#xff0c;通过描写普通人的生活&#xff0c;展现了人生的苦乐交织。这篇读后感旨在通过秀、少平、金秀、兰香、秀莲、少安、孙玉厚、孙玉亭、顾养民、润生、润叶、向前、登云、晓霞、田福堂、田福军、张有智、苗凯、王满银、兰花等人…

算法 | 子集数排列树满m叉树二分搜索归并排序快速排序

子集树&#xff1a;O(2^n) 一个序列的所有子集为2^n&#xff0c;即可看成具有2^n个叶节点的满二叉树 int backtrack(int k) //k表示扩展结点在解空间树中所处的层次 {if(k>n) //n标识问题的规模output(x); //x是存放当前解的一维数组if(constraint(k)…

01—Linux网络设置

1.1查看及测试网络 1.1.1 查看网络配置 1.查看网络接口地址 主机的网络接口卡通常称为网络接口。在LInux操作系统中&#xff0c;使用ifconfig命令可以查看网络接口的地址配置信息。 &#xff08;1&#xff09;查看活动的网络接口设备 若采用mini版CenOS7安装的系统&#x…

新技术前沿-2023-大模型学习根据个人数据集微调一个Transformer模型

参考如何根据自己的数据集微调一个 Transformer 模型 我们将通过NLP中最常见的文本分类任务来学习如何在自己的数据集上利用迁移学习(transfer learning)微调一个预训练的Transformer模型——DistilBERT。DistilBERT是BERT的一个衍生版本&#xff0c;它的优点在它的性能与BERT相…