java里面封装https请求工具类2
其他写法
https://blog.csdn.net/weixin_44372802/article/details/132620809?spm=1001.2014.3001.5501
encodeJson 是请求参数的密文格式(大公司都是要对请求参数加密的)
ResponseBean 是自己或者对方定义的返回内容参数
public ResponseBean sendByEncodeJson(String encodeJson, String interfaceName) throws IOException {//构建完整urlMap<String, String> urlMap = buildUrl(interfaceName);String url = JpHttpUtils.initUrl(sfUrl, urlMap);log.info("请求地址" + url+"请求报文" + encodeJson);String responseString = JpHttpUtils.post(url, encodeJson);log.info("远程接口响应:" + responseString);//JSON 字符串转换为 SfResponseBean 对象return new Gson().fromJson(responseString, SfResponseBean.class);}
public Map<String, String> buildUrl(String method) throws IOException {Map<String, String> map = new HashMap<>();map.put("appId",appId);map.put("source",source);map.put("appToken",appToken);map.put("userToken",userToken);map.put("method",method);map.put("timestamp",String.valueOf(System.currentTimeMillis()));map.put("v","1.0");return map;}
@Slf4j
public class JpHttpUtils {private static final Logger logger = LoggerFactory.getLogger(JpHttpUtils.class);private static final int SOCKET_TIMEOUT = 30000;// 请求超时时间private static final int CONNECT_TIMEOUT = 30000;// 传输超时时间/*** 发送xml请求到server端** @param url xml请求数据地址* @param xmlString 发送的xml数据流* @return null发送失败,否则返回响应内容*/public static String sendPost(String url, String xmlString) {StringBuilder retStr = new StringBuilder();// 创建HttpClientBuilderHttpClientBuilder httpClientBuilder = HttpClientBuilder.create();// HttpClientCloseableHttpClient closeableHttpClient = httpClientBuilder.build();HttpPost httpPost = new HttpPost(url);// 设置请求和传输超时时间RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(SOCKET_TIMEOUT).setConnectTimeout(CONNECT_TIMEOUT).build();httpPost.setConfig(requestConfig);try {httpPost.setHeader("Content-Type", "text/xml;charset=UTF-8");StringEntity data = new StringEntity(xmlString, StandardCharsets.UTF_8);httpPost.setEntity(data);CloseableHttpResponse response = closeableHttpClient.execute(httpPost);HttpEntity entity = response.getEntity();if (entity != null) {// 打印响应内容retStr.append(EntityUtils.toString(entity, "UTF-8"));logger.info("response:{}", retStr);}} catch (Exception e) {logger.error("exception in doPostSoap1_1", e);} finally {// 释放资源try {closeableHttpClient.close();} catch (IOException e) {e.printStackTrace();}}return retStr.toString();}public static String sendPostByForm(String url, Map<String,String> formMap) {List<NameValuePair> params=new ArrayList<NameValuePair>();for(Map.Entry<String, String> entry : formMap.entrySet()){params.add(new BasicNameValuePair(entry.getKey(),entry.getValue()));}HttpPost httppost = new HttpPost(url);httppost.setHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");HttpResponse response = null;try {httppost.setEntity(new UrlEncodedFormEntity(params,"UTF-8"));HttpClient httpClient =HttpClientBuilder.create().build();response = httpClient.execute(httppost);} catch (IOException e) {e.printStackTrace();}HttpEntity httpEntity = response.getEntity();String result = null;try {result = EntityUtils.toString(httpEntity);} catch (Exception e) {e.printStackTrace();}System.out.println("sendPostByForm response:"+result);return result;}public static String sendPut(String url, String string, Map<String,String> headerMap) {StringBuilder retStr = new StringBuilder();// 创建HttpClientBuilderHttpClientBuilder httpClientBuilder = HttpClientBuilder.create();// HttpClientCloseableHttpClient closeableHttpClient = httpClientBuilder.build();HttpPost httpPost = new HttpPost(url);// 设置请求和传输超时时间RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(SOCKET_TIMEOUT).setConnectTimeout(CONNECT_TIMEOUT).build();httpPost.setConfig(requestConfig);try {httpPost.setHeader("Content-Type", "application/json");if(string!=null){StringEntity data = new StringEntity(string, StandardCharsets.UTF_8);httpPost.setEntity(data);}if (headerMap != null) {for (String key : headerMap.keySet()) {httpPost.setHeader(new BasicHeader(key, headerMap.get(key)));}}CloseableHttpResponse response = closeableHttpClient.execute(httpPost);HttpEntity entity = response.getEntity();if (entity != null) {// 打印响应内容retStr.append(EntityUtils.toString(entity, "UTF-8"));logger.info("response:{}", retStr);}} catch (Exception e) {logger.error("exception in doPostSoap1_1", e);} finally {// 释放资源try {closeableHttpClient.close();} catch (IOException e) {e.printStackTrace();}}return retStr.toString();}public static String doGet(String url, Map<String, String> param) {// 创建Httpclient对象CloseableHttpClient httpclient = HttpClients.createDefault();String resultString = "";CloseableHttpResponse response = null;try {// 创建uriURIBuilder builder = new URIBuilder(url);if (param != null) {for (String key : param.keySet()) {builder.addParameter(key, param.get(key));}}URI uri = builder.build();// 创建http GET请求HttpGet httpGet = new HttpGet(uri);// 执行请求response = httpclient.execute(httpGet);// 判断返回状态是否为200if (response.getStatusLine().getStatusCode() == 200) {resultString = EntityUtils.toString(response.getEntity(), "UTF-8");}} catch (Exception e) {e.printStackTrace();} finally {try {if (response != null) {response.close();}httpclient.close();} catch (IOException e) {e.printStackTrace();}}return resultString;}public static String doGet(String url) {return doGet(url, null);}/*** 带header参数* @param url* @param param* @return*/public static String doGetSetHeader(String url, Map<String, String> param,Map<String, String> headerMap) {// 创建Httpclient对象CloseableHttpClient httpclient = HttpClients.createDefault();String resultString = "";CloseableHttpResponse response = null;try {// 创建uriURIBuilder builder = new URIBuilder(url);// 设置请求的参数if (param != null) {for (String key : param.keySet()) {builder.addParameter(key, param.get(key));}}URI uri = builder.build();// 创建http GET请求HttpGet httpGet = new HttpGet(uri);// 设置 Headerif (headerMap != null) {for (String key : headerMap.keySet()) {httpGet.setHeader(key, headerMap.get(key));}}// 执行请求response = httpclient.execute(httpGet);// 判断返回状态是否为200if (response.getStatusLine().getStatusCode() == 200) {resultString = EntityUtils.toString(response.getEntity(), "UTF-8");}} catch (Exception e) {e.printStackTrace();} finally {try {if (response != null) {response.close();}httpclient.close();} catch (IOException e) {e.printStackTrace();}}return resultString;}public static String doPost(String url, Map<String, String> param) {// 创建Httpclient对象CloseableHttpClient httpClient = HttpClients.createDefault();CloseableHttpResponse response = null;String resultString = "";try {// 创建Http Post请求HttpPost httpPost = new HttpPost(url);// 创建参数列表if (param != null) {List<NameValuePair> paramList = new ArrayList<>();for (String key : param.keySet()) {paramList.add(new BasicNameValuePair(key, param.get(key)));}// 模拟表单UrlEncodedFormEntity entity = new UrlEncodedFormEntity(paramList);httpPost.setEntity(entity);}// 执行http请求response = httpClient.execute(httpPost);resultString = EntityUtils.toString(response.getEntity(), "utf-8");} catch (Exception e) {e.printStackTrace();} finally {try {if(null != response){response.close();}} catch (IOException e) {e.printStackTrace();}}return resultString;}public static String doPost(String url) {return doPost(url, null);}public static String doPostJson(String url, String json) {// 创建Httpclient对象CloseableHttpClient httpClient = HttpClients.createDefault();CloseableHttpResponse response = null;String resultString = "";try {// 创建Http Post请求HttpPost httpPost = new HttpPost(url);// 创建请求内容StringEntity entity = new StringEntity(json, ContentType.APPLICATION_JSON);httpPost.setEntity(entity);// 执行http请求response = httpClient.execute(httpPost);resultString = EntityUtils.toString(response.getEntity(), "utf-8");} catch (Exception e) {e.printStackTrace();} finally {try {if(null != response){response.close();}} catch (IOException e) {e.printStackTrace();}}return resultString;}public static String doPostJson(String url, String json,Map<String,String> headers) {// 创建Httpclient对象CloseableHttpClient httpClient = HttpClients.createDefault();CloseableHttpResponse response = null;String resultString = "";try {// 创建Http Post请求HttpPost httpPost = new HttpPost(url);for(String key:headers.keySet()){httpPost.setHeader(key,headers.get(key));}// 创建请求内容StringEntity entity = new StringEntity(json, ContentType.APPLICATION_JSON);httpPost.setEntity(entity);// 执行http请求response = httpClient.execute(httpPost);resultString = EntityUtils.toString(response.getEntity(), "utf-8");} catch (Exception e) {log.error("Exception",e);} finally {try {if(null != response){response.close();}} catch (IOException e) {e.printStackTrace();}}return resultString;}/*** 创建一个SSL信任所有证书的httpClient对象** @return*/public static CloseableHttpClient createSSLClientDefault() {try {SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() {// 信任所有@Overridepublic boolean isTrusted(X509Certificate[] chain, String authType) throws CertificateException {return true;}}).build();SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext);return HttpClients.custom().setSSLSocketFactory(sslsf).build();} catch (KeyManagementException e) {e.printStackTrace();} catch (NoSuchAlgorithmException e) {e.printStackTrace();} catch (KeyStoreException e) {e.printStackTrace();}return HttpClients.createDefault();}//连接符public static final String SPE3_CONNECT = "&";//赋值符public static final String SPE4_EQUAL = "=";//问号符public static final String SPE5_QUESTION = "?";public static final String SPE1_COMMA = ",";//示意符public static final String SPE2_COLON = ":";public static final String ENCODING = "UTF-8";public static String initUrl(String host, Map<String, String> queries) throws UnsupportedEncodingException {StringBuilder sbUrl = new StringBuilder();sbUrl.append(host);if (null != queries) {StringBuilder sbQuery = new StringBuilder();for (Map.Entry<String, String> query : queries.entrySet()) {if (0 < sbQuery.length()) {sbQuery.append(SPE3_CONNECT);}if (StringUtils.isBlank(query.getKey()) && !StringUtils.isBlank(String.valueOf(query.getValue()))) {sbQuery.append(query.getValue());}if (!StringUtils.isBlank(query.getKey())) {sbQuery.append(query.getKey());if (!StringUtils.isBlank(String.valueOf(query.getValue()))) {sbQuery.append(SPE4_EQUAL);sbQuery.append(URLEncoder.encode(String.valueOf(query.getValue()), ENCODING));}}}if (0 < sbQuery.length()) {sbUrl.append(SPE5_QUESTION).append(sbQuery);}}return sbUrl.toString();}public static final int TIMEOUT = 30000;/*** HTTP -> POST** @param url* @param param* @return* @throws Exception*/public static String post(String url, String param) {String result = null;CloseableHttpClient httpclient = null;CloseableHttpResponse response = null;try {httpclient = HttpClients.createDefault();HttpPost postmethod = new HttpPost(url);RequestConfig requestConfig = RequestConfig.custom().setConnectionRequestTimeout(TIMEOUT).setConnectTimeout(TIMEOUT).setSocketTimeout(TIMEOUT).build();postmethod.setConfig(requestConfig);postmethod.addHeader("content-type", "application/json");postmethod.setEntity(new StringEntity(param, "UTF-8"));response = httpclient.execute(postmethod);int statusCode = response.getStatusLine().getStatusCode();if (statusCode == HttpStatus.SC_OK) {HttpEntity entity = response.getEntity();if (entity != null) {result = EntityUtils.toString(entity);}}} catch (Exception e) {log.error("post请求异常", e);} finally {try {httpclient.close();} catch (IOException e) {log.error("IOException post请求异常", e);}}return result;}
}
package com.bbyb.transportmonitor.utils.sf;import lombok.Data;import java.io.Serializable;/*** 请求实体* @date 2024/5/31 10:02*/
@Data
public class SfResponseBean implements Serializable {/*** 接口状态 200 成功 其它异常*/private String code;private String message;private boolean success;private Model model;private String data;@Dataclass Model implements Serializable {private String erpOrder;private String code;private String sfOrderNo;}
}
相关文章:
java里面封装https请求工具类2
其他写法 https://blog.csdn.net/weixin_44372802/article/details/132620809?spm1001.2014.3001.5501 encodeJson 是请求参数的密文格式(大公司都是要对请求参数加密的) ResponseBean 是自己或者对方定义的返回内容参数 public ResponseBean sendByEnc…...
前端面试题日常练-day59 【面试题】
题目 希望这些选择题能够帮助您进行前端面试的准备,答案在文末 1. 在PHP中,以下哪个符号用于比较两个值的相等性? a) b) c) d) ! 2. PHP中的预定义变量$_POST用于获取什么类型的数据? a) 用户的输入数据 b) 浏览器发送的请…...
计算机小问题(4)--关闭联想电脑的小组件
打开联想软件管家,关闭即可 (今天弄了好久才找到,记录一下)...
mac无法读取windows分区怎么办 苹果硬盘怎么读取
对于Mac电脑用户但有Windows系统使用需求的,我们可以通过Boot Camp启动转换助理安装Windows分区这个方案来解决,不过因为两个系统的磁盘格式不同,相应的也会产生一些问题,例如无法正常读取windows分区。下面本文就详细说明mac无法…...
【设计模式】JAVA Design Patterns——State(状态模式)
🔍目的 允许对象在内部状态改变时改变它的行为。对象看起来好像修改了它的类。 🔍解释 真实世界例子 当在长毛象的自然栖息地观察长毛象时,似乎它会根据情况来改变自己的行为。它开始可能很平静但是随着时间推移当它检测到威胁时它会对周围的…...
Docker搭建可道云
Docker搭建可道云(存储) 文章目录 Docker搭建可道云(存储)介绍资源列表基础环境一、安装Docker二、配置Docker加速器三、搭建可道云私有云盘3.1、编写Dockerfile3.2、上传资源到指定目录3.3、查看目录下所有资源 四、构建镜像五、…...
【RISC-V】站在巨人的肩膀上——看开源芯片、软件生态、与先进计算/人工智能/安全的结合
目录 会议议程前言开源处理器芯片的机遇与挑战,孙凝晖,中国工程院院士RISC-V原生基础软件栈,武延军,中国科学院软件研究所RISC-V推动新型架构创新,孟建熠,浙江大学 专题一:开源芯片开源高性能 R…...
test 判断字符串不为空
#!/bin/bash read -p "请输入参数:" name test -z $name if [ $? -eq 1 ]; then echo "入参:$name" else echo "入参为null" fi...
Python数据分析I
目录 注:简单起见,下文中"df"均写为"表名","函数"均写为"HS","属性"均写为"SX","范围"均写为"FW"。 1.数据分析常用开源库 注释…...
Qt5/6使用SqlServer用户连接操作SqlServer数据库
网上下载SQLServer2022express版数据库,这里没啥可说的,随你喜欢,也可以下载Develop版本。安装完后,我们可以直接连接尝试, 不过一般来说,还是下载SQLServer管理工具来连接数据更加方便。 所以直接下载ssms, 我在用的时候,一开始只能用Windows身份登录。 所以首先,我…...
[经验] 场效应管是如何发挥作用的 #知识分享#学习方法#职场发展
场效应管是如何发挥作用的 在现代电子技术领域,场效应管(MOSFET)是一种重要的半导体元器件。它的作用非常广泛,例如在集成电路中扮演着关键的角色。在本文中,我们将详细探讨场效应管的作用及其在实际应用中的意义。 简…...
数据挖掘--分类
数据挖掘--引论 数据挖掘--认识数据 数据挖掘--数据预处理 数据挖掘--数据仓库与联机分析处理 数据挖掘--挖掘频繁模式、关联和相关性:基本概念和方法 数据挖掘--分类 数据挖掘--聚类分析:基本概念和方法 基本概念 决策树归纳 决策树:决策树是一…...
数据结构篇其六-串
数据结构—串 前置说明 由于学习Java面向对象语言走火入魔,试图在C语言中模拟实现面向对象设计。里面加入了大量的函数指针配合结构体来模拟类中的成员方法 故此篇,亦可称: 面向对象的C语言程序设计 用C语言实现串这种数据结构,并将它应用到…...
队列和栈的实现
本节讲解的队列与栈,如果你对之前的线性和链式结构顺利掌握了,那么下边的队列和栈就小菜一碟了。因为我们会用前两节讲到的东西来实现队列和栈。 之所以放到一起讲是因为这两个东西很类似,队列是先进先出结构(FIFO, first in first out)&…...
lua vm 五: upvalue
前言 在 lua vm 中,upvalue 是一个重要的数据结构。upvalue 以一种高效的方式实现了词法作用域,使得函数能成为 lua 中的第一类值,也因其高效的设计,导致在实现上有点复杂。 函数 (proto) upvalue 构成了闭包(closu…...
React Native中集成ArcGIS以显示地图、渲染自定义图层和获取地理信息数据
在您的数据采集上传的应用中集成ArcGIS以显示地图、渲染自定义图层和获取地理信息数据是一项常见需求。下面是如何实现这些功能的详细指南,包括具体步骤和示例代码。 1. 显示地图 原生开发 Android: 使用ArcGIS Android SDK。您需要在AndroidManifest…...
java中的异常-异常处理(try、catch、finally、throw、throws)+自定义异常
一、概述 1、java程序员在编写程序时提前编写好对异常的处理程序,在程序发生异常时就可以执行预先设定好的处理程序,处理程序执行完之后,可以继续向后执行后面的程序 2、异常处理程序是在程序执行出现异常时才执行的 二、5个关键字 1、tr…...
深入了解反射
newInstance 可访问性限制: newInstance()方法只能调用无参的公共构造函数。如果类没有无参公共构造函数,那么newInstance()方法将无法使用。 异常处理: newInstance()方法在创建对象时会抛出受检异常InstantiationException和IllegalAcces…...
5、搭建前端项目
5.1 使用vite vue搭建 win r 打开终端 切换到你想要搭建的盘 npm init vitelatest跟着以下步骤取名即可 cd fullStackBlognpm installnpm run dev默认在 http://localhost:5173/ 下启动了 5.2 用vscode打开项目并安装需要的插件 1、删除多余的 HelloWorld.vue 文件 2、安装…...
LLM之Agent初探
Agent是什么? Agent一词起源于拉丁语中的Agere,意思是“to do”。在LLM语境下,Agent可以理解为在某种能自主理解、规划决策、执行复杂任务的智能体。 Agent并非ChatGPT升级版,它不仅告诉你“如何做”,更会帮你去做。…...
目录穿越漏洞CVE-2018-7171复现 又学到一招小技巧!!!!
还是半夜睡不着,打开靶机开始操作。今天看了文件下载和目录穿越漏洞想结合以及防御方法。半夜来进行操作一波。复现一下漏洞,这个网上的文章页比较的少!!! 开始操作起来!!! 进入到页…...
代码随想录算法训练营day41
题目:01背包理论基础、416. 分割等和子集 参考链接:代码随想录 动态规划:01背包理论基础 思路:01背包是所有背包问题的基础,第一次看到比较懵,完全不知道dp数据怎么设置。具体分析还是dp五部曲ÿ…...
从0~1开发财务软件
1.获取图形验证码接口 功能要求 1、随机生成6位字符 2、将字符生成base64位格式的图片,返回给前端 3、将生成的字符存储到redis中,用匿名身份id(clientId)作为key,验证码作为value。 clientId通过/login/getClien…...
Python实现连连看9
(2)标识选中的图片 在判断出玩家选中的是哪一张图片之后,接下来就可以标识选中的图片了,即在该选中的图片外围画矩形。代码如下所示。 FIRSTCLICK True #FIRSTCLICK是全局变量 if(click_col>0 and click_row>0) and \(no…...
项目验收总体计划书(实际项目验收原件参考Word)
测试目标:确保项目的需求分析说明书中的所有功能需求都已实现,且能正常运行;确保项目的业务流程符合用户和产品设计要求;确保项目的界面美观、风格一致、易学习、易操作、易理解。 软件全套文档过去进主页。 一、 前言 ࿰…...
C++基础与深度解析 | 异常处理 | 枚举与联合 | 嵌套类与局部类 | 嵌套名字空间与匿名名字空间 | 位域与volatile关键字
文章目录 一、异常处理二、枚举与联合三、嵌套类与局部类四、嵌套名字空间与匿名名字空间五、位域与volatile关键字 一、异常处理 异常处理用于处理程序在调用过程中的非正常行为。 传统的处理方法:传返回值表示函数调用是否正常结束。 例如,返回 0 表示…...
番外篇 | 利用华为2023最新Gold-YOLO中的Gatherand-Distribute对特征融合模块进行改进
前言:Hello大家好,我是小哥谈。论文提出一种改进的信息融合机制Gather-and-Distribute (GD) ,通过全局融合多层特征并将全局信息注入高层,以提高YOLO系列模型的信息融合能力和检测性能。通过引入MAE-style预训练方法,进一步提高模型的准确性。🌈 目录 🚀1.论文解…...
python记录之字符串
在Python中,字符串是一种非常常见且重要的数据类型,用于存储文本信息。下面,我们将对Python字符串进行深入的讲解,包括其基本操作、常见方法、格式化以及高级特性。 1. 字符串的创建 在Python中,字符串可以通过单引号…...
Elasticsearch 认证模拟题 - 15
一、题目 原索引 task1 的字段 title 字段包含单词 The,查询 the 可以查出 1200 篇文档。重建 task1 索引为 task1_new,重建后的索引, title 字段查询 the 单词,不能匹配到任何文档。 PUT task1 {"mappings": {"…...
g++ 预处理 编译 汇编 链接 命令
g 预处理 编译 汇编 链接 命令 在命令行中使用 g 预处理、编译、汇编和链接源代码文件通常遵循以下步骤: 预处理(Preprocessing):将源代码文件转换为经过预处理器处理的中间文件。 g -E source.cpp -o source.i 编译ÿ…...
苏州高端做网站/seo外包公司需要什么
(1) 选择最有效率的表名顺序(只在基于规则的优化器中有效): ORACLE 的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处理,在FROM子句中包含多个表的情况下,你必…...
重庆做商城网站/上海有什么seo公司
来自:啤酒大泡泡链接:cnblogs.com/hzg110/p/6936101.html正文 目前所有的项目都在使用maven,可是一直没有时间去整理学习,这两天正好有时间,好好的整理一下。一、为什么使用Maven这样的构建工具【why】① 一个项目就…...
网站诊断方案/学校seo推广培训班
Redhat Linux网卡及IP设置单网卡多IP例:将eht0 添加新地址 eth0:1拷贝/etc/sysconfig/network-scripts/ifcfg-eth0文件为ifcfg-eth0:1修改其中DEVICEeth0:1根据需要修改IP地址(IPADD)和掩码(NETMASK),可以删除NETWORK、BROADCAST、HWADDR重启网络服务#service netwo…...
网页设计与制作实用教程(第3版)/网站结构优化的内容和方法
20150803 Created By BaoXinjian 一、摘要 1. JXL 1.1 JXL优点: Jxl对中文支持非常好,操作简单,方法看名知意。 Jxl是纯javaAPI,在跨平台上表现的非常完美,代码可以再windows或者Linux上运行而无需重新编写 支持Excel …...
英文网站建设 江门/百度搜索关键词热度
我安装的是Ubuntu18.04系统,每次双击sh文件都是用vim,我还得切换到命令行去执行;这就有点不方便了。 解决办法:点击Preferences设置 切换到Behavior,选择Run them 最后到这个需要执行的文件属性里去,勾选Allow executing file as …...
做视频背景音乐网站/最新今日头条
1.题目 2.思路 明确题目的路径定义后,知道有4种路径: (1)单一结点 (2)某个结点及其左子树组成的路径 (3)某个结点及其右子树组成的路径 (4)某个各节点及其左…...