http工具类

public class HttpRequstUtil {/*** http请求方法** @param message        查询条件* @param url            查询地址* @param token          身份验证token* @param socketTimeout  socket 响应时间* @param connectTimeout 超时时间* @return 返回字符串*/@Deprecatedpublic static String queryResultToString(JSON message, String url, String token, int socketTimeout, int connectTimeout) throws Exception {/*System.out.println("->开始http请求");System.out.println("请求参数>>>" + message.toString());System.out.println("请求链接>>>" + url);System.out.println("请求token>>>" + token);System.out.println("超时配置socketTimeout-connectTimeout>>>" + socketTimeout + "-" + connectTimeout);*/String result = "";// 转码 将发送的数据转为字符串实体StringEntity outEntity = new StringEntity(message.toString(), "UTF-8");outEntity.setContentType("application/json");//System.out.println("请求数据转码>>>" + outEntity.toString());// 配置请求项RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(socketTimeout).setConnectTimeout(connectTimeout).build();//System.out.println("请求配置项>>>" + requestConfig.toString());// 配置请求头HttpPost httpPost = new HttpPost(url);httpPost.addHeader("Content-Type", "application/json");httpPost.addHeader("Accept", "application/json");httpPost.addHeader("X-Aa-Token", token);httpPost.setEntity(outEntity);httpPost.setConfig(requestConfig);//System.out.println("http请求信息>>>" + httpPost.toString());try {result = (String) executeRequest(httpPost, true);} catch (Exception e) {throw new Exception(e.toString());}return result;}/*** @param httpRequest* @return java.lang.String* @description 执行Http请求* @date 2022/5/6 20:51*/public static Object executeRequest(HttpUriRequest httpRequest, boolean isStr) throws IOException, DebtException, Exception {Object result = null;// 执行一个http请求,传递HttpGet或HttpPost参数CloseableHttpClient httpclient = null;if ("https".equals(httpRequest.getURI().getScheme())) {httpclient = createSSLInsecureClient();} else {httpclient = HttpClients.createDefault();}try {CloseableHttpResponse response = httpclient.execute(httpRequest);//判断接口是否调用成功int statusCode = response.getStatusLine().getStatusCode();if (HttpStatus.SC_OK != statusCode) {System.out.println("接口调用失败");throw new ApiException("接口调用失败,HttpStatus="+statusCode);} else {//System.out.println("发起请求->连接成功");HttpEntity entity = response.getEntity();// 是-获取字符串 否-获取字节数组if (isStr) {result = EntityUtils.toString(entity, "UTF-8");} else {result = EntityUtils.toByteArray(entity);}// 关闭资源EntityUtils.consume(entity);}} catch (Exception e) {throw new Exception(e.toString());} finally {try {httpclient.close();} catch (IOException e) {throw new IOException(e.toString());}}return result;}/*** 创建 SSL连接*/private static CloseableHttpClient createSSLInsecureClient() throws Exception {try {SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(new TrustStrategy() {@Overridepublic boolean isTrusted(X509Certificate[] chain, String authType) throws CertificateException {return true;}}).build();SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext, new HostnameVerifier() {@Overridepublic boolean verify(String hostname, SSLSession session) {return true;}});return HttpClients.custom().setSSLSocketFactory(sslsf).build();} catch (GeneralSecurityException ex) {throw new RuntimeException(ex);}}/*** @description 通过POST方式发送JSON数据* @author wangws* @date 2022/9/7 12:54* @param url     请求路径* @param message 待发送JSON信息* @param isStr   是否返回字符串(否,返回字节数组)* @param header  请求头Header(设置Token等)* @param timeOut 超时时间设置(socketTimeout,connectTimeout)* @return java.lang.Object*/public static Object sendJsonByPost(String url, JSON message, boolean isStr, Map<String, String> header, Map<String, Integer> timeOut) throws Exception {Object result = null;// 1.创建http请求对象Object httpRequestObj = createHttpRequest("POST");if (!StringTool.isNull(httpRequestObj)) {HttpPost httpPost = (HttpPost) httpRequestObj;// 2.添加URLhttpPost.setURI(URI.create(url));// 无需设置Header的Content-Type// 3.设置其他请求头信息if (!StringTool.isNull(header)) {Iterator<Map.Entry<String, String>> iterator = header.entrySet().iterator();while (iterator.hasNext()) {Map.Entry<String, String> next = iterator.next();httpPost.addHeader(next.getKey(), next.getValue());}}// 添加JSON信息// 将发送的数据转为字符串实体StringEntity entity = new StringEntity(message.toString(), "UTF-8");entity.setContentType("application/json;charset=UTF-8");// 4.设置消息体httpPost.setEntity(entity);RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(timeOut.get("socketTimeout")).setConnectTimeout(timeOut.get("connectTimeout")).build();// 5.设置请求配置项httpPost.setConfig(requestConfig);// 6.执行Http请求对象,返回结果result = executeRequest(httpPost, isStr);} else {throw new ApiException("Http Request Method is not be matched");}return result;}/*** @param path    请求路径* @param message Get请求参数* @param isStr   是否返回字符串(否,返回字节数组)* @param header  请求头Header(设置Token等)* @param timeOut 超时时间设置(socketTimeout,connectTimeout)* @return java.lang.Object* @description 通过GET方式请求数据* @author wangws* @date 2022/10/18 12:54*/public static Object sendDataByGet(String path, Map<String, String> message, boolean isStr, Map<String, String> header, Map<String, Integer> timeOut) throws Exception {Object result = null;// 1.创建http请求对象Object httpRequestObj = createHttpRequest("GET");if (!StringTool.isNull(httpRequestObj)) {HttpGet httpGet = (HttpGet) httpRequestObj;StringBuilder urlBuilder = new StringBuilder();// 设置接口地址urlBuilder.append(path);URIBuilder uri = new URIBuilder();// 设置网络协议//uri.setScheme("https");// 设置主机地址//uri.setHost("www.baidu.com");// 设置方法//uri.setPath("/getdata");//添加参数// 2.拼接GET请求参数if (!StringTool.isNull(message) && !message.isEmpty()) {Iterator<Map.Entry<String, String>> it = message.entrySet().iterator();while (it.hasNext()) {Map.Entry<String, String> next = it.next();uri.setParameter(next.getKey(), next.getValue());}}urlBuilder.append(uri.build().toString());// 3.添加URLhttpGet.setURI(new URI(urlBuilder.toString()));// 4.设置其他请求头信息if (!StringTool.isNull(header)) {Iterator<Map.Entry<String, String>> iterator = header.entrySet().iterator();while (iterator.hasNext()) {Map.Entry<String, String> next = iterator.next();httpGet.addHeader(next.getKey(), next.getValue());}}RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(timeOut.get("socketTimeout")).setConnectTimeout(timeOut.get("connectTimeout")).build();// 5.设置请求配置项httpGet.setConfig(requestConfig);// 6.执行Http请求对象,返回结果result = executeRequest(httpGet, isStr);} else {throw new Exception("Http Request Method is not be matched");}return result;}/*** @description 通过POST方式上传文件* @author wangws* @date 2022/9/7 12:55* @param url     请求路径* @param file    待上传文件* @param isStr   是否返回字符串(否,返回字节数组)* @param header  请求头Header* @param param   待发送参数信息* @param timeOut 超时时间设置(socketTimeout,connectTimeout)* @return java.lang.Object*/public static Object uploadFileByPost(String url, File file, boolean isStr, Map<String, String> header, Map<String, String> param, Map<String, Integer> timeOut) throws Exception {Object result = "";// 1.创建http请求对象Object httpRequestObj = createHttpRequest("POST");if (!StringTool.isNull(httpRequestObj)) {HttpPost httpPost = (HttpPost) httpRequestObj;// 2.添加URLhttpPost.setURI(URI.create(url));// 3.追加文件(类似form表单),支持多个// RFC6532 避免文件名为中文时乱码MultipartEntityBuilder builder = MultipartEntityBuilder.create().setMode(HttpMultipartMode.RFC6532);// 参数名upload(可修改) 注意和后台接收时保持一致builder.addBinaryBody("upload", file, ContentType.MULTIPART_FORM_DATA, file.getName());builder.setCharset(Charset.forName("UTF-8"));// 无需设置Header的Content-Type,否则会出错// 4.设置其他请求头信息if (!StringTool.isNull(header)) {Iterator<Map.Entry<String, String>> iterator = header.entrySet().iterator();while (iterator.hasNext()) {Map.Entry<String, String> next = iterator.next();httpPost.addHeader(next.getKey(), next.getValue());}}// 5.builder添加其他参数信息if (!StringTool.isNull(param)) {Iterator<Map.Entry<String, String>> it = param.entrySet().iterator();while (it.hasNext()) {Map.Entry<String, String> next = it.next();builder.addTextBody(next.getKey(), next.getValue());}}HttpEntity entity = builder.build();// 6.设置消息体httpPost.setEntity(entity);// 7.设置配置项RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(timeOut.get("socketTimeout")).setConnectTimeout(timeOut.get("connectTimeout")).build();httpPost.setConfig(requestConfig);// 8.执行Http请求对象,返回JSON类型字符串result = executeRequest(httpPost, isStr);} else {throw new ApiException("Http Request Method is not be matched");}// 返回结果return result;}/*** @description 创建HttpRequest请求对象* @author wangws* @date 2022/9/7 12:55* @param requestMethod* @return java.lang.Object*/public static Object createHttpRequest(String requestMethod) {// 大写转换requestMethod = requestMethod.toUpperCase();// 设置HTTP的请求方式if ("POST".equals(requestMethod)) {return new HttpPost();} else if ("GET".equals(requestMethod)) {return new HttpGet();} else if ("HEAD".equals(requestMethod)) {return new HttpHead();} else if ("PUT".equals(requestMethod)) {return new HttpPut();} else if ("PATCH".equals(requestMethod)) {return new HttpPatch();} else if ("DELETE".equals(requestMethod)) {return new HttpDelete();} else if ("OPTIONS".equals(requestMethod)) {return new HttpOptions();} else if ("TRACE".equals(requestMethod)) {return new HttpTrace();}return null;}

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

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

相关文章

金仕达与 DolphinDB 建立深度合作,共筑 FICC 科技创新新篇章

从“关起门做交易”到“打开门做服务”&#xff0c;国内 FICC 业务正经历从自营到市场化服务的转变&#xff0c;借助数据分析、算法交易等技术的快速发展&#xff0c;交易团队能够更加主动地发现市场需求&#xff0c;为不同客群提供更好的做市业务&#xff0c;FICC 交易电子化已…

打造智能汽车微服务系统平台:架构的设计与实现

随着智能汽车技术的飞速发展&#xff0c;微服务架构在汽车行业中的应用越来越广泛。采用微服务架构可以使汽车系统更加灵活、可扩展&#xff0c;并且有利于快速推出新功能和服务。本文将从设计原则、关键技术、数据安全等方面&#xff0c;介绍如何搭建智能汽车微服务系统平台架…

网络通信技术

▶1.分组交换技术 在网络通信中&#xff0c;数据通过网络节点的某种转发方式&#xff0c;实现从一个端系统到另一个端系统之间的数据传输技术称为数据交换技术。数据交换技术有电路交换、报文交换和分组交换&#xff0c;计算机网络采用分组交换技术。 分组就是源主机(如服务器…

【Python】FastAPI 项目创建 与 Docker 部署

文章目录 前言&需求描述1. 本地FastAPI1.1 Python 环境准备1.2 本地 Pycharm 创建FastAPI项目 2. Python FastAPI 部署2.1 服务器配置Python环境2.2.1 下载与配置Git、Pyenv等工具2.2.2 下载与配置Python 2.2 FastAPI 打包成镜像2.2.1 项目准备所需环境文件2.2.2 编写Docke…

毕业设计——基于springboot的聊天系统设计与实现(服务端 + 客户端 + web端)

整个工程包含三个部分&#xff1a; 1、聊天服务器 聊天服务器的职责一句话解释&#xff1a;负责接收所有用户发送的消息&#xff0c;并将消息转发给目标用户。 聊天服务器没有任何界面&#xff0c;但是却是IM中最重要的角色&#xff0c;为表达敬意&#xff0c;必须要给它放个…

入侵和攻击模拟 (BAS) 技术应用实践

文章目录 前言一、实施BAS的必要性二、实施BAS的关键步骤1、识别网络中的脆弱区域2、创建基线安全模型3、选择合适的BAS工具4、进行模拟攻击测试5、分析结果并改进三、BAS实施中的挑战1、组织的专业知识和能力有限2、改变传统工作流程3、安全预算不足4、难以与现有安全基础设施…

C语言中的不同变量初始值:深度解析与实践指南

在C语言编程领域&#xff0c;理解和掌握变量的初始化原理和过程是构建稳健、高效代码的基础。C语言对不同类型变量的初始化处理方式存在差异&#xff0c;这要求开发者明确理解并合理应用这些规则以避免潜在的运行时错误和未定义行为。本文将详细解读C语言中各类变量的初始状态设…

AI智能分析网关V4车辆违停算法在园区场景中的应用及特点

随着城市化进程的加速&#xff0c;车辆违停问题愈发严重&#xff0c;给城市交通带来了极大的困扰。为了解决这一问题&#xff0c;AI技术逐渐被应用于车辆违停的检测中。AI检测算法在车辆违停方面的应用&#xff0c;主要是通过计算机视觉技术&#xff0c;对道路上的车辆进行实时…

智慧灌区项目案例(甘肃省兰州市某重点灌区)

​甘肃省兰州市某重点灌区自上个世纪80年代建成后,灌溉面积达到30万亩,对推动当地农业发展发挥了重要作用。但长期以来,该灌区的水利管理仍主要依靠人工统计记录,缺乏实时监测和精细化管理。为实现灌区管理的现代化升级,甘肃水利局委托星创易联公司设计实施水利信息化项目。 项…

【Python笔记-设计模式】状态模式

一、说明 状态模式是一种行为设计模式&#xff0c;用于解决对象在不同状态下具有不同行为 (一) 解决问题 在对象行为根据对象状态而改变时&#xff0c;规避使用大量的条件语句来判断对象的状态&#xff0c;提高系统可维护性 (二) 使用场景 当对象的行为取决于其状态&#…

C#使用iText7将多个PDF文档合并为单个文档

使用HtmlAgilityPack抓取并分析网页内容&#xff0c;然后再调用PuppeteerSharp将网页生成PDF文件&#xff0c;最终的成果如下图所示&#xff0c;得到将近120个pdf文档。能看&#xff0c;但是不方便&#xff0c;需要逐个打开文档才能看到所需的内容&#xff0c;最好能将这些文档…

浅谈 Linux 网络编程 socket

文章目录 socket 介绍 socket 介绍 socket 被翻译成 网络套接字&#xff0c;这个名字实在是不好理解&#xff0c;我更愿意称为"插槽"。 忽略 socket 的中文名&#xff0c;先无脑记住两个规则&#xff1a; ① 记住&#xff0c;一个文件描述符(fd) 指向一个 socket&…

GPT-SoVITS音色克隆-模型训练步骤

GPT-SoVITS音色克隆-模型训练步骤 GPT-SoVITS模型源码一个简单的TTS后端项目 基于模型部署和训练教程&#xff0c;语雀 模型部署和训练教程 启动模型训练的主页面 1. 切到模型路径 /psycheEpic/GPT-SoVITS进入Python虚拟环境&#xff0c;并挂起执行python脚本 conda activ…

机器学习(II)--样本不平衡

现实中&#xff0c;样本&#xff08;类别&#xff09;样本不平衡&#xff08;class-imbalance&#xff09;是一种常见的现象&#xff0c;如&#xff1a;金融欺诈交易检测&#xff0c;欺诈交易的订单样本通常是占总交易数量的极少部分&#xff0c;而且对于有些任务而言少数样本更…

Linux信号【产生-保存-处理】

目录 前言&#xff1a; 1、进程信号基本概念 1.1、什么是信号&#xff1f; 1.2、信号的作用 2、键盘键入 2.1、ctrlc 终止前台进程 2.1.1、signal 注册执行动作 3、系统调用 3.1、kill 函数 3.2、模拟实现 myKill 3.3、raise 函数 3.4、abort 函数 4、软件条件信号…

人工智能福利站,初识人工智能,图神经网络学习,第五课

&#x1f3c6;作者简介&#xff0c;普修罗双战士&#xff0c;一直追求不断学习和成长&#xff0c;在技术的道路上持续探索和实践。 &#x1f3c6;多年互联网行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &#x1f389;欢迎 &#x1f44d;点赞✍评论…

nginx设置缓存时间、日志分割、开启多进程、网页压缩、配置防盗链

一、设置缓存时间 当网页数据返回给客户端后&#xff0c;可针对静态网页设置缓存时间&#xff0c;在配置文件内的http段内server段添加location&#xff0c;更改字段expires 1d来实现&#xff1a;避免重复请求&#xff0c;加快访问速度 第一步&#xff1a;修改主配置文件 #修…

Vulnhub靶机:basic_pentesting_2

一、介绍 运行环境&#xff1a;Virtualbox 攻击机&#xff1a;kali&#xff08;10.0.2.4&#xff09; 靶机&#xff1a;basic_pentesting_2&#xff08;10.0.2.7&#xff09; 目标&#xff1a;获取靶机root权限和flag 靶机下载地址&#xff1a;https://download.vulnhub.c…

如何选择O2OA(翱途)开发平台的部署架构?

概述 O2OA(翱途)开发平台[下称O2OA开发平台或者O2OA]支持公有云&#xff0c;私有云和混合云部署&#xff0c;也支持复杂的网络结构下的分布式部署。本篇主要介绍O2OA(翱途)开发平台支持的部署环境以及常用的集群部署架构。 软硬件环境说明 支持的云化平台&#xff1a; 华为云…

分布式概念:编码一个简单分布式系统

分布式系统是由多台计算机组成的系统&#xff0c;它们通过网络连接并共同完成任务。以下是一个简单的分布式系统的编码示例&#xff1a; 定义系统架构 首先&#xff0c;需要定义系统的架构。包括确定系统中的计算节点、通信机制和任务分配方式等。 编写计算节点代码 每个计算节…