Java原生HttpURLConnection实现Get、Post、Put和Delete请求完整工具类分享

这里博主纯手写了一个完整的 HTTP 请求工具类,该工具类支持多种请求方法,包括 GETPOSTPUT 和 DELETE,并且可以选择性地使用身份验证 token。亲测可用,大家可以直接复制并使用这段代码,以便在自己的项目中快速实现 HTTP 请求的功能。

目录

一、完整代码

二、调用示例

三、运行截图


一、完整代码

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;public class HttpUtils {public static String doGet(String url) throws Exception {return doGet(url, null);}public static String doGet(String url, String token) throws Exception {HttpURLConnection con = createConnection(url, "GET", token);return handleResponse(con);}public static String doPost(String url, String params) throws IOException {return doPost(url, null, params);}public static String doPost(String url, String token, String params) throws IOException {HttpURLConnection con = createConnection(url, "POST", token);con.setDoOutput(true);// 发送 POST 请求try (OutputStream os = con.getOutputStream()) {byte[] input = params.getBytes("utf-8");os.write(input, 0, input.length);}return handleResponse(con);}public static String doPut(String url, String params) throws IOException {return doPut(url, null, params);}public static String doPut(String url, String token, String params) throws IOException {HttpURLConnection con = createConnection(url, "PUT", token);con.setDoOutput(true);// 发送 PUT 请求try (OutputStream os = con.getOutputStream()) {byte[] input = params.getBytes("utf-8");os.write(input, 0, input.length);}return handleResponse(con);}public static String doDelete(String url) throws IOException {return doDelete(url, null);}public static String doDelete(String url, String token) throws IOException {HttpURLConnection con = createConnection(url, "DELETE", token);return handleResponse(con);}private static HttpURLConnection createConnection(String url, String method, String token) throws IOException {URL obj = new URL(url);HttpURLConnection con = (HttpURLConnection) obj.openConnection();con.setRequestMethod(method);con.setRequestProperty("Content-Type", "application/json; utf-8");con.setRequestProperty("Accept", "application/json");if (token != null) {con.setRequestProperty("Authorization", "Bearer " + token);}return con;}private static String handleResponse(HttpURLConnection con) throws IOException {int responseCode = con.getResponseCode();StringBuilder response = new StringBuilder();if (responseCode == HttpURLConnection.HTTP_OK) {try (BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream(), "utf-8"))) {String line;while ((line = in.readLine()) != null) {response.append(line.trim());}}return response.toString();} else {// 读取错误信息try (BufferedReader errorReader = new BufferedReader(new InputStreamReader(con.getErrorStream()))) {StringBuilder errorResponse = new StringBuilder();String errorLine;while ((errorLine = errorReader.readLine()) != null) {errorResponse.append(errorLine);}System.out.println("接口调用失败:" + errorResponse.toString());}return null;}}
}

二、调用示例

import com.alibaba.fastjson.JSONObject;public class Main {public static void main(String[] args) throws Exception {String rel = HttpUtils.doGet("http://localhost:9090/api/user/1","e5b086c7-7486-4959-b70f-84fb8970899c");System.out.println(rel);JSONObject jsonObject = new JSONObject();jsonObject.put("id",2L);jsonObject.put("username","李四");jsonObject.put("gender","1");jsonObject.put("address","上海");String rel2 = HttpUtils.doPost("http://localhost:9090/api/user","e5b086c7-7486-4959-b70f-84fb8970899c",jsonObject.toString());System.out.println(rel2);String rel3 = HttpUtils.doPut("http://localhost:9090/api/user","e5b086c7-7486-4959-b70f-84fb8970899c",jsonObject.toString());System.out.println(rel3);String rel4 = HttpUtils.doDelete("http://localhost:9090/api/user/1","e5b086c7-7486-4959-b70f-84fb8970899c");System.out.println(rel4);}
}

三、运行截图

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

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

相关文章

powerbi -L10-文件夹内的文件名

powerbi -L10-文件夹内的文件名 Folder.Contents letSource Folder.Contents("\\your_folder\ your_folder "),#"Removed Other Columns" Table.SelectColumns(Source,{"Name", "Date modified", "Folder Path"}), in#&q…

云原生信息安全:筑牢数字化时代的安全防线

云原生信息安全:筑牢数字化时代的安全防线 一、云原生信息安全概述 云原生安全包含两层重要含义。一方面,面向云原生环境的安全,目标是防护云原生环境中的基础设施、编排系统和微服务等系统的安全。在云原生内部,安全机制多以云原…

7个提升网站分页体验的 CSS 和 JavaScript 代码片段

文章目录 前言正文1.简洁直观的悬停分页效果2.实时显示页码的分页3.适合响应式设计的多功能分页4.专为移动设备优化的分页5.无数字的极简分页设计6.触屏友好的分页7.结合无限滚动与分页的设计 总结 前言 分页是内容丰富的网站中不可缺少的导航工具,能帮助用户更轻松…

【数据结构】什么是二叉搜索(排序)树?

🦄个人主页:修修修也 🎏所属专栏:数据结构 ⚙️操作环境:Visual Studio 2022 目录 📌二叉搜索(排序)树的概念 📌二叉搜索(排序)树的操作 🎏二叉搜索树的查找 🎏二叉搜索树的插入 🎏二叉搜索树的…

how can I train a OpenAI fine tuned model with more prompts

题意:我如何使用更多提示来训练一个 OpenAI 微调模型? 问题背景: I fine-tuned OpenAI model with some prompts following this documentation it succeeded and created a new model in the playground. How I can retrain (fine-tune) th…

邮件营销:助力企业转换客户,提升曝光率

邮件营销:独立站推广的关键策略 在独立站推广的众多方法中,邮件营销占据着重要地位。本文将为刚刚接触独立站运营的新手介绍邮件营销的基础知识。在信息泛滥的时代,开设一个店铺和成功地引流并不意味着一劳永逸。对于绝大多数中小型电商企业…

AIGC实战之如何构建出更好的大模型RAG系统

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。…

感知器神经网络

1、原理 感知器是一种前馈人工神经网络,是人工神经网络中的一种典型结构。感知器具有分层结构,信息从输入层进入网络,逐层向前传递至输出层。根据感知器神经元变换函数、隐层数以及权值调整规则的不同,可以形成具有各种功能特点的…

matlab模拟时间有负数的信号频谱

真实还原频谱,要做一次fftshift 直接fft,得到的频谱有线性偏移

高级大数据开发学习路线指南

掌握大数据技术是一项系统性工程,涉及到广泛的技能和专业知识。为了帮助初学者构建坚实的基础,并逐步成长为大数据领域的专家,下面详细阐述了一条全面而深入的学习路线: 1. Java 编程基础 - 打造坚实的底层技能 关键知识点&…

C++对象拷贝时的优化编译

在现代编译器中,当我们在 C中进行对象的拷贝操作时,编译器并非只是机械地执行逐字节的复制。相反,它会进行优化,避免不必要的拷贝构造等等,这种优化包括“返回值优化”(RVO),“拷贝省…

kubernetes调度2

1、各种缩写的应用 [rootk8s-master test]# kubectl get rsNAME DESIRED CURRENT READY AGEtest001-64c7957b5c 2 2 2 8m59stest001-698b98bb8f 0 0 0 12m[rootk8s-master test]# kubectl get replicas…

XML映射器-动态sql

01-动态sql 1.实现动态条件SQL 第一种方法在sql语句中加入where 11其他条件都加and就行,这样就可以根据if条件来判断要传递的参数可以有几个 第二种方法用where标签给if语句包起来 where标签的作用如下图 第三种方法用trim标签解释如下图 用choose也可以实现条件查询如下图,…

【RabbitMQ】死信队列、延迟队列

死信队列 死信,简单理解就是因为种种原因,无法被消费的消息。 有死信,自然就有死信队列。当一个消息在一个队列中变成死信消息之后,就会被重新发送到另一个交换器中,这个交换器就是DLX(Dead Letter Excha…

C++入门 之 类和对象(下)

目录 一、初始化列表 二、隐式类型转换与explict 三、静态成员——static 四、友元 五、内部类 六、匿名对象 七.对象拷贝时的编译器优化 一、初始化列表 之前我们实现构造函数时,初始化成员变量主要使用函数体内赋值,构造函数初始化还有一种方式&…

信奥初赛解析:1-3-计算机软件系统

知识要点 软件系统是计算机的灵魂。没有安装软件的计算机称为“裸机”,无法完成任何工作硬件为软件提供运行平台。软件和硬件相互关联,两者之间可以相互转化,互为补充 计算机软件系统按其功能可分为系统软件和应用软件两大类 一、系统软件 系统软件是指…

SpringCloud微服务实现服务降级的最佳实践

Spring Cloud是一种用于快速构建分布式系统的框架,它提供了许多有用的功能,其中包括服务降级。 服务降级是一种保护机制,它可以在面临高并发或故障时保持服务的稳定性。当系统资源不足或服务出现故障时,服务降级可以通过关闭一些功…

react 组件化开发_生命周期_表单处理

组件基本介绍 我们从上面可以清楚地看到,组件本质上就是类和函数,但是与常规的类和函数不同的是,组件承载了渲染视图的 UI 和更新视图的 setState 、 useState 等方法。React 在底层逻辑上会像正常实例化类和正常执行函数那样处理的组件。 因…

Unsupervised Deep Representation Learning for Real-Time Tracking

摘要 我们的无监督学习的动机是稳健的跟踪器应该在双向跟踪中有效。具体来说,跟踪器能够在连续帧中前向定位目标对象,并回溯到其在第一帧中的初始位置。基于这样的动机,在训练过程中,我们测量前向和后向轨迹之间的一致性&#xf…

95、k8s之rancher可视化

一、ranker 图形化界面 图形化界面进行k8s集群的管理 rancher自带监控----普罗米修斯 [rootmaster01 opt]# docker load -i rancher.tar ##所有节点 [rootmaster01 opt]# docker pull rancher/rancher:v2.5.7 ##主节点[rootmaster01 opt]# vim /etc/docker/daemon.jso…