HttpUtils——助力高效网络通信

使用HttpClient发送请求、接收响应很简单,一般需要如下几步即可:

1、创建HttpClient对象。
2、创建请求方法的实例,并指定请求URL。如果需要发送GET请求,
创建HttpGet对象;如果需要发送POST请求,创建HttpPost对象。
3、如果需要发送请求参数,可调用HttpGetHttpPost
共同的setParams(HttpParams params)方法来添加请求参数;
对于HttpPost对象而言,也可调用setEntity(HttpEntity entity)
方法来设置请求参数。
4、调用HttpClient对象的execute(HttpUriRequest request)
发送请求,该方法返回一个HttpResponse5、调用HttpResponsegetAllHeaders()getHeaders(String name)
等方法可获取服务器的响应头;调用HttpResponsegetEntity()方法可获取HttpEntity对象,
该对象包装了服务器的响应内容。程序可通过该对象获取服务器的响应内容。
6、释放连接。无论执行方法是否成功,都必须释放连接

引入依赖

  <!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient --><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.13</version></dependency>

工具类

@Slf4j
public class HttpUtils {public static String defaultEncoding = "utf-8";/*** 发送http post请求,并返回响应实体** @param url 请求地址* @return url响应实体*/public static String postRequest(String url) {return postRequest(url, null, null);}/*** <p>方法名: postRequest</p>* <p>描述: 发送httpPost请求</p>** @param url* @param params* @return*/public static String postRequest(String url, Map<String, Object> params) {return postRequest(url, null, params);}/*** 发送http post请求,并返回响应实体** @param url     访问的url* @param headers 请求需要添加的请求头* @param params  请求参数* @return*/public static String postRequest(String url, Map<String, String> headers,Map<String, Object> params) {String result = null;CloseableHttpClient httpClient = buildHttpClient();HttpPost httpPost = new HttpPost(url);if (null != headers && headers.size() > 0) {for (Entry<String, String> entry : headers.entrySet()) {String key = entry.getKey();String value = entry.getValue();httpPost.addHeader(new BasicHeader(key, value));}}if(isJSON(params.toString())){/*** json格式*/StringEntity requestEntity = new StringEntity(params.toString(), "utf-8");requestEntity.setContentEncoding("UTF-8");httpPost.setHeader("Content-type", "application/json");httpPost.setEntity(requestEntity);}else{/*** 名称值对节点类型*/if (null != params && params.size() > 0) {List<NameValuePair> pairList = new ArrayList<NameValuePair>(params.size());for (Map.Entry<String, Object> entry : params.entrySet()) {NameValuePair pair = new BasicNameValuePair(entry.getKey(), entry.getValue().toString());pairList.add(pair);}httpPost.setEntity(new UrlEncodedFormEntity(pairList, Charset.forName(defaultEncoding)));}}try {CloseableHttpResponse response = httpClient.execute(httpPost);try {HttpEntity entity = response.getEntity();if (entity != null) {log.info("【POST请求信息】,请求地址:{},请求参数:{}", url, params);result = EntityUtils.toString(entity, Charset.forName(defaultEncoding));log.info("【POST请求信息】,请求地址:{},请求参数:{},返回结果:{}", url, params,result);}} finally {response.close();}} catch (Exception ex) {ex.printStackTrace();} finally {try {httpClient.close();} catch (IOException e) {e.printStackTrace();}}return result;}/*** 发送http get请求** @param url 请求url* @return url返回内容*/public static String getRequest(String url) {return getRequest(url, null);}/*** 发送http get请求** @param url    请求的url* @param params 请求的参数* @return*/public static String getRequest(String url, Map<String, Object> params) {return getRequest(url, null, params);}/*** 发送http get请求** @param url        请求的url* @param headersMap 请求头* @param params     请求的参数* @return*/public static String getRequest(String url, Map<String, String> headersMap, Map<String, Object> params) {String result = null;CloseableHttpClient httpClient = buildHttpClient();try {String apiUrl = url;if (null != params && params.size() > 0) {StringBuffer param = new StringBuffer();int i = 0;for (String key : params.keySet()) {if (i == 0)param.append("?");elseparam.append("&");param.append(key).append("=").append(params.get(key));i++;}apiUrl += param;}HttpGet httpGet = new HttpGet(apiUrl);if (null != headersMap && headersMap.size() > 0) {for (Entry<String, String> entry : headersMap.entrySet()) {String key = entry.getKey();String value = entry.getValue();httpGet.addHeader(new BasicHeader(key, value));}}CloseableHttpResponse response = httpClient.execute(httpGet);try {HttpEntity entity = response.getEntity();if (null != entity) {log.info("【GET请求信息】,请求地址:{},请求参数:{}", url, params);result = EntityUtils.toString(entity, defaultEncoding);log.info("【GET请求信息】,请求地址:{},请求参数:{},返回结果:{}", url, params,result);}} finally {response.close();}} catch (ClientProtocolException e) {e.printStackTrace();} catch (ParseException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {try {httpClient.close();} catch (IOException e) {e.printStackTrace();}}return result;}/*** 创建httpclient,支持http、https** @return*/public static CloseableHttpClient buildHttpClient() {try {RegistryBuilder<ConnectionSocketFactory> builder = RegistryBuilder.create();ConnectionSocketFactory factory = new PlainConnectionSocketFactory();builder.register("http", factory);KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());SSLContext context = SSLContexts.custom().useTLS().loadTrustMaterial(trustStore, new TrustStrategy() {public boolean isTrusted(X509Certificate[] chain,String authType) throws CertificateException {return true;}}).build();LayeredConnectionSocketFactory sslFactory = new SSLConnectionSocketFactory(context,SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);builder.register("https", sslFactory);Registry<ConnectionSocketFactory> registry = builder.build();PoolingHttpClientConnectionManager manager = new PoolingHttpClientConnectionManager(registry);ConnectionConfig connConfig = ConnectionConfig.custom().setCharset(Charset.forName(defaultEncoding)).build();SocketConfig socketConfig = SocketConfig.custom().setSoTimeout(100000).build();manager.setDefaultConnectionConfig(connConfig);manager.setDefaultSocketConfig(socketConfig);return HttpClientBuilder.create().setConnectionManager(manager).build();} catch (KeyStoreException e) {e.printStackTrace();} catch (KeyManagementException e) {e.printStackTrace();} catch (NoSuchAlgorithmException e) {e.printStackTrace();}return null;}public static boolean isJSON(String str) {boolean result = false;try {Object obj=JSON.parse(str);result = true;} catch (Exception e) {result=false;}return result;}public static void main(String[] args) {String url1 = "http://192.168.56.101:8196/test/get1";String result = HttpUtils.getRequest(url1);System.out.println(result);String url2 = "http://192.168.56.101:8196/test/get2";Map<String, Object> params = new HashMap<>();params.put("name", "一安未来1");params.put("addr", "北京1");String result2 = HttpUtils.postRequest(url2, null,params);System.out.println(result2);String url3 = "http://192.168.56.101:8196/test/get3";JSONObject jsonObject = new JSONObject();jsonObject.put("name", "一安未来2");jsonObject.put("addr", "北京2");String result3 = HttpUtils.postRequest(url3, null,jsonObject);System.out.println(result3);}GET请求信息】,请求地址:http://192.168.56.101:8196/test/get1,请求参数:nullGET请求信息】,请求地址:https://192.168.56.101:8196/test/get1,请求参数:null,返回结果:{"result":"success"}POST请求信息】,请求地址:http://192.168.56.101:8196/test/get2,请求参数:{name=一安未来1, addr=北京1}POST请求信息】,请求地址:http://192.168.56.101:8196/test/get2,请求参数:{name=一安未来1, addr=北京1},返回结果:{"name":"一安未来1","addr":"北京1"}POST请求信息】,请求地址:http://192.168.56.101:8196/test/get3,请求参数:{"name":"一安未来2","addr":"北京2"}POST请求信息】,请求地址:http://192.168.56.101:8196/test/get3,请求参数:{"name":"一安未来2","addr":"北京2"},返回结果:{"name":"一安未来2","addr":"北京2"}}

接口类

@RestController
public class TestController {@GetMapping("get1")public String test1(){return "{\"result\":\"success\"}";}@PostMapping("get2")private Map<String, Object> test2(@RequestParam Map<String,Object> map){return map;}@PostMapping("get3")private Map test3(@RequestBody Map<String,Object> map){return map;}}

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

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

相关文章

【ECharts】折线图

文章目录 折线图1折线图2折线图3示例 参考&#xff1a; Echarts官网 Echarts 配置项 折线图1 带X轴、Y轴标记线&#xff0c;其中X轴是’category’ 类目轴&#xff0c;适用于离散的类目数据。 let myChart echarts.init(this.$refs.line_chart2); let yList [400, 500, 6…

关于“Python”的核心知识点整理大全31

目录 12.4.2 在屏幕上绘制飞船 alien_invasion.py ​编辑12.5 重构&#xff1a;模块 game_functions 12.5.1 函数 check_events() game_functions.py alien_invasion.py 12.5.2 函数 update_screen() game_functions.py alien_invasion.py 12.6 驾驶飞船 12.6.1 响应…

RESTful简介与C/C++实现

一、RESTful简介 RESTful&#xff0c;全称为Representational State Transfer&#xff0c;是一种软件架构风格和设计理念&#xff0c;而不是一种标准。它主要用于Web服务的设计和开发&#xff0c;强调资源的状态表示和状态转移。RESTful风格的设计使得Web服务更加简洁、清晰和…

msvcp120.dll丢失的多种详细有效解决方法

在计算机使用过程中&#xff0c;我们可能会遇到一些错误提示&#xff0c;其中之一就是“msvcp120.dll丢失”。那么&#xff0c;msvcp120.dll到底是什么&#xff1f;为什么会出现丢失的情况&#xff1f;丢失后会对电脑产生什么影响&#xff1f;本文将为您详细解答这些问题&#…

HarmonyOS笔记1

修改字体颜色 在Text里边&#xff0c;按一下 . 就行了&#xff0c;按点号会自动提示 fontColor 函数参数给‘#36D’可以把‘Hello World’调成蓝色 onClick(()>{}) 按钮 如何打印第二句话 Text方法 2023年12月21日11:26:52

项目从0到1,架构选型 :单体架构优先考虑

当我听到关于团队使用微服务架构的故事时&#xff0c;我注意到了一个共同的现象。 几乎所有成功的微服务故事都是从一个过于庞大的庞然大物开始的&#xff0c;后来这个庞然大物被拆分了我所听说的几乎所有从零开始构建微服务系统的案例&#xff0c;最终都陷入了严重的麻烦。 …

Mybatis Mapper XML文件-插入,更新,删除(insert, update and delete)

数据修改语句&#xff08;插入、更新和删除&#xff09;在实现上非常相似&#xff1a; <insertid"insertAuthor"parameterType"domain.blog.Author"flushCache"true"statementType"PREPARED"keyProperty""keyColumn&quo…

强烈推荐的前端学习资源,先收藏!

今天分享一些个人收藏的前端学习资源&#xff0c;按一下几个维度简单划分了下&#xff0c;有 3D、框架、构建工具等等。由于这些地址都是我个人收藏的&#xff0c;所以带有一些强烈的主观意识&#xff0c;还有很多优秀的网址没有收录进来&#xff0c;会不断更新的&#xff0c;欢…

系统分析师(软考)知识点整理(二)

会计相关 会计是指记录、分类、汇总、计量和报告发送在企业经济活动中的财务数据的行为 #mermaid-svg-YBI5YPWzqWhRB4kI {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-YBI5YPWzqWhRB4kI .error-icon{fill:#552222…

亚马逊鲲鹏系统引爆广告点击率提升秘籍

在竞争激烈的电商市场&#xff0c;提高广告点击率成为各大卖家争相追求的目标。而如今&#xff0c;亚马逊鲲鹏系统的强大功能再次为卖家们打开了广告优化的新大门。其中&#xff0c;搜索广告功能更是成为提高关键词排名的利器。本文将详细介绍如何通过亚马逊鲲鹏系统实现点击广…

Scrum项目管理流程及免费敏捷工具

​ 项目启动&#xff1a; 团队明确项目愿景、目标和范围&#xff0c;确定项目范围和优先级&#xff0c;并建立团队以及开展初步计划。 制定产品待办事项清单&#xff08;Product Backlog&#xff09;&#xff1a; 定义项目所需功能、任务和需求列表&#xff0c;并按优先级排序…

多维时序 | MATLAB实现KOA-CNN-BiGRU-Multihead-Attention多头注意力机制多变量时间序列预测

多维时序 | MATLAB实现KOA-CNN-BiGRU-Multihead-Attention多头注意力机制多变量时间序列预测 目录 多维时序 | MATLAB实现KOA-CNN-BiGRU-Multihead-Attention多头注意力机制多变量时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 MATLAB实现KOA-CNN-B…

定制@ResponseBody

自定义注解类&#xff08;annotation&#xff09;&#xff1a; IgnoreResult该类用于忽略不使用ResponseBody package com.baizhi.mall.annotation;import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.Retention…

2312d,D语言单元测试等

原文 我最近决定在"系统编程"领域试些小众语言.我已用了Java,Dart和Kotlin等高级语言编程多年了(并试了许多其他相同级别或更高级的语言),需要扩大视野,因为对某些类型应用,这些语言并不是最好的工具. 这篇博文中,我想重点介绍D语言这里,经过一些初步实验,它比其他语…

Vue3 的效率提升主要表现在哪些方面?

Vue3带来了许多性能优化和效率提升的特性。本文将重点讨论Vue3在静态提升、预字符串化、缓存事件处理函数、Block Tree和PatchFlag方面的改进。我们将通过对比Vue2和Vue3的编译结果来说明这些方面的效率提升。 静态提升 在Vue2中&#xff0c;每次渲染时都会重新创建VNode节点…

linux | 软连接与硬链接 | 实测

很多知识&#xff0c;我们都是通过学习其他博主的博客&#xff0c;可是学习的过程 常常需要辩证的去辨别真伪。这很耗精力&#xff0c;最好的方法就是实践去检测。 软链接 和 应链接 在 linux 上操作非常重要 常见场景&#xff1a;最重要的就是&#xff0c;做备份&#xff0c;尤…

Talk | 约翰霍普金斯大学博士生魏晨: De-Diffusion-文本是不同模态的沟通桥梁

本期为TechBeat人工智能社区第557期线上Talk。 北京时间12月20日(周三)20:00&#xff0c;约翰霍普金斯大学博士生—魏晨的Talk已准时在TechBeat人工智能社区开播&#xff01; 她与大家分享的主题是: “De-Diffusion-文本是不同模态的沟通桥梁题”&#xff0c;介绍了她的团队在如…

面向对象程序设计(异常,RTTI,泛型,动态加载)

异常 首先&#xff0c;我们知道Java中的异常分为两大类&#xff1a;编译时异常和运行时异常。编译时异常通常是一些在编写代码时就能发现的错误&#xff0c;比如文件找不到之类的&#xff1b;而运行时异常则是在程序运行过程中出现的&#xff0c;比如除零错误。 我们可以使用…

Linux---进程状态

目录 一、系统进程状态介绍 1.运行状态 2.阻塞状态 3.挂起状态 二、Linux中的进程状态 1.R (running) 2.S (sleeping) 3.D&#xff08;disk sleep&#xff09; 4.T&#xff08;stopped&#xff09; 5.t&#xff08;tracing stop&#xff09; 6.X&#xff08;dead&am…

liunx安装git

安装 Git 更新包列表: 首先&#xff0c;更新您的包管理器的包列表。这确保您可以安装最新版本的 Git。在基于 Debian 的系统&#xff08;如 Ubuntu&#xff09;上&#xff0c;使用以下命令&#xff1a;sudo apt-get update如果您使用的是基于 RPM 的系统&#xff08;如 CentOS&…