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);
    }
}

三、运行截图

相关推荐
娇娇yyyyyy2 分钟前
QT编程(10): QLineEdit
开发语言·qt
Albert Edison8 分钟前
【ProtoBuf 语法详解】Any 类型
服务器·开发语言·c++·protobuf
喵叔哟18 分钟前
5. 【Blazor全栈开发实战指南】--Blazor组件基础
开发语言·javascript·ecmascript
罗超驿27 分钟前
Java数据结构_链表
java·数据结构·链表
鬓戈31 分钟前
SeaweedFS集群上文件遍历和删除
运维·python
海奥华232 分钟前
Rust初步学习
开发语言·学习·rust
小璐资源网1 小时前
C++中如何正确区分`=`和`==`的使用场景?
java·c++·算法
卢锡荣1 小时前
LDR6021Q 车规级 Type‑C PD 控制芯片:一芯赋能,边充边传,稳驭全场景
c语言·开发语言·ios·计算机外设·电脑
、BeYourself1 小时前
Scala 基础语法
开发语言·scala
AMoon丶1 小时前
C++模版-函数模版,类模版基础
java·linux·c语言·开发语言·jvm·c++·算法