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

相关文章

轻松上手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

Python利用自带模块实现屏幕像素高效操作

《Python利用自带模块实现屏幕像素高效操作》这篇文章主要为大家详细介绍了Python如何利用自带模块实现屏幕像素高效操作,文中的示例代码讲解详,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1、获取屏幕放缩比例2、获取屏幕指定坐标处像素颜色3、一个简单的使用案例4、总结1、获取屏幕放缩比例from

使用Python实现高效的端口扫描器

《使用Python实现高效的端口扫描器》在网络安全领域,端口扫描是一项基本而重要的技能,通过端口扫描,可以发现目标主机上开放的服务和端口,这对于安全评估、渗透测试等有着不可忽视的作用,本文将介绍如何使... 目录1. 端口扫描的基本原理2. 使用python实现端口扫描2.1 安装必要的库2.2 编写端口扫

Oracle查询优化之高效实现仅查询前10条记录的方法与实践

《Oracle查询优化之高效实现仅查询前10条记录的方法与实践》:本文主要介绍Oracle查询优化之高效实现仅查询前10条记录的相关资料,包括使用ROWNUM、ROW_NUMBER()函数、FET... 目录1. 使用 ROWNUM 查询2. 使用 ROW_NUMBER() 函数3. 使用 FETCH FI

在C#中获取端口号与系统信息的高效实践

《在C#中获取端口号与系统信息的高效实践》在现代软件开发中,尤其是系统管理、运维、监控和性能优化等场景中,了解计算机硬件和网络的状态至关重要,C#作为一种广泛应用的编程语言,提供了丰富的API来帮助开... 目录引言1. 获取端口号信息1.1 获取活动的 TCP 和 UDP 连接说明:应用场景:2. 获取硬

Python实现高效地读写大型文件

《Python实现高效地读写大型文件》Python如何读写的是大型文件,有没有什么方法来提高效率呢,这篇文章就来和大家聊聊如何在Python中高效地读写大型文件,需要的可以了解下... 目录一、逐行读取大型文件二、分块读取大型文件三、使用 mmap 模块进行内存映射文件操作(适用于大文件)四、使用 pand

高效管理你的Linux系统: Debian操作系统常用命令指南

《高效管理你的Linux系统:Debian操作系统常用命令指南》在Debian操作系统中,了解和掌握常用命令对于提高工作效率和系统管理至关重要,本文将详细介绍Debian的常用命令,帮助读者更好地使... Debian是一个流行的linux发行版,它以其稳定性、强大的软件包管理和丰富的社区资源而闻名。在使用

高效+灵活,万博智云全球发布AWS无代理跨云容灾方案!

摘要 近日,万博智云推出了基于AWS的无代理跨云容灾解决方案,并与拉丁美洲,中东,亚洲的合作伙伴面向全球开展了联合发布。这一方案以AWS应用环境为基础,将HyperBDR平台的高效、灵活和成本效益优势与无代理功能相结合,为全球企业带来实现了更便捷、经济的数据保护。 一、全球联合发布 9月2日,万博智云CEO Michael Wong在线上平台发布AWS无代理跨云容灾解决方案的阐述视频,介绍了

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设