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

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

目录

一、完整代码

二、调用示例

三、运行截图


一、完整代码

java 复制代码
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;
        }
    }
}

二、调用示例

java 复制代码
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);
    }
}

三、运行截图

相关推荐
Gofarlic_oms13 小时前
利用API实现ANSYS许可证管理自动化集成
运维·服务器·开发语言·matlab·自动化·负载均衡
AI+程序员在路上4 小时前
VS Code 完全使用指南:下载、安装、核心功能与 内置AI 编程助手实战
开发语言·人工智能·windows·开源
invicinble4 小时前
这里对java的知识体系做一个全域的介绍
java·开发语言·python
catchadmin4 小时前
使用 PHP TrueAsync 改造 Laravel 协程异步化的可行路径
开发语言·php·laravel
wbs_scy4 小时前
【Linux 线程进阶】进程 vs 线程资源划分 + 线程控制全详解
java·开发语言
ss2734 小时前
食谱推荐系统功能测试如何写?
java·数据库·spring boot·功能测试
AI人工智能+电脑小能手5 小时前
【大白话说Java面试题】【Java基础篇】第15题:JDK1.7中HashMap扩容为什么会发生死循环?如何解决
java·开发语言·数据结构·后端·面试·哈希算法
m0_674294645 小时前
如何编写SQL存储过程性能对比_记录执行时间评估优化效果
jvm·数据库·python
try2find5 小时前
打印ascii码报错问题
java·linux·前端
014-code5 小时前
CompletableFuture 实战模板(超时、组合、异常链处理)
java·数据库