HttpUtils——助力高效网络通信

2023-12-20 14:20

本文主要是介绍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;}}

这篇关于HttpUtils——助力高效网络通信的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/516355

相关文章

如何高效移除C++关联容器中的元素

《如何高效移除C++关联容器中的元素》关联容器和顺序容器有着很大不同,关联容器中的元素是按照关键字来保存和访问的,而顺序容器中的元素是按它们在容器中的位置来顺序保存和访问的,本文介绍了如何高效移除C+... 目录一、简介二、移除给定位置的元素三、移除与特定键值等价的元素四、移除满足特android定条件的元

基于Python实现高效PPT转图片工具

《基于Python实现高效PPT转图片工具》在日常工作中,PPT是我们常用的演示工具,但有时候我们需要将PPT的内容提取为图片格式以便于展示或保存,所以本文将用Python实现PPT转PNG工具,希望... 目录1. 概述2. 功能使用2.1 安装依赖2.2 使用步骤2.3 代码实现2.4 GUI界面3.效

Java图片压缩三种高效压缩方案详细解析

《Java图片压缩三种高效压缩方案详细解析》图片压缩通常涉及减少图片的尺寸缩放、调整图片的质量(针对JPEG、PNG等)、使用特定的算法来减少图片的数据量等,:本文主要介绍Java图片压缩三种高效... 目录一、基于OpenCV的智能尺寸压缩技术亮点:适用场景:二、JPEG质量参数压缩关键技术:压缩效果对比

C#使用SQLite进行大数据量高效处理的代码示例

《C#使用SQLite进行大数据量高效处理的代码示例》在软件开发中,高效处理大数据量是一个常见且具有挑战性的任务,SQLite因其零配置、嵌入式、跨平台的特性,成为许多开发者的首选数据库,本文将深入探... 目录前言准备工作数据实体核心技术批量插入:从乌龟到猎豹的蜕变分页查询:加载百万数据异步处理:拒绝界面

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis

SpringBoot使用OkHttp完成高效网络请求详解

《SpringBoot使用OkHttp完成高效网络请求详解》OkHttp是一个高效的HTTP客户端,支持同步和异步请求,且具备自动处理cookie、缓存和连接池等高级功能,下面我们来看看SpringB... 目录一、OkHttp 简介二、在 Spring Boot 中集成 OkHttp三、封装 OkHttp

使用Python高效获取网络数据的操作指南

《使用Python高效获取网络数据的操作指南》网络爬虫是一种自动化程序,用于访问和提取网站上的数据,Python是进行网络爬虫开发的理想语言,拥有丰富的库和工具,使得编写和维护爬虫变得简单高效,本文将... 目录网络爬虫的基本概念常用库介绍安装库Requests和BeautifulSoup爬虫开发发送请求解

C++实现回文串判断的两种高效方法

《C++实现回文串判断的两种高效方法》文章介绍了两种判断回文串的方法:解法一通过创建新字符串来处理,解法二在原字符串上直接筛选判断,两种方法都使用了双指针法,文中通过代码示例讲解的非常详细,需要的朋友... 目录一、问题描述示例二、解法一:将字母数字连接到新的 string思路代码实现代码解释复杂度分析三、

轻松上手MYSQL之JSON函数实现高效数据查询与操作

《轻松上手MYSQL之JSON函数实现高效数据查询与操作》:本文主要介绍轻松上手MYSQL之JSON函数实现高效数据查询与操作的相关资料,MySQL提供了多个JSON函数,用于处理和查询JSON数... 目录一、jsON_EXTRACT 提取指定数据二、JSON_UNQUOTE 取消双引号三、JSON_KE

Tomcat高效部署与性能优化方式

《Tomcat高效部署与性能优化方式》本文介绍了如何高效部署Tomcat并进行性能优化,以确保Web应用的稳定运行和高效响应,高效部署包括环境准备、安装Tomcat、配置Tomcat、部署应用和启动T... 目录Tomcat高效部署与性能优化一、引言二、Tomcat高效部署三、Tomcat性能优化总结Tom