我记得很早之前跟路小磊聊过,HTTP请求超时的时间,当时不知道说的是什么,说的是会再后面迭代变更。结果一直到现在都没变更!所以本篇文章需要额外强调,请求需要配置超时的时间!

带有Slf4j日志封装Hutool HTTP工具类

@Slf4j
public class HttpUtils {

    // 发送 GET 请求
    public static String sendGet(String url) {
        log.info("发送 GET 请求,URL: {}", url);
        HttpResponse response = HttpRequest.get(url).timeout(2000).execute();
        return handleResponse(response);
    }

    // 发送 POST 请求
    public static String sendPost(String url, Map<String, Object> paramMap) {
        log.info("发送 POST 请求,URL: {}, 参数: {}", url, paramMap);
        HttpResponse response = HttpRequest.post(url).form(paramMap).timeout(2000).execute();
        return handleResponse(response);
    }

    // 发送 JSON 数据的 POST 请求
    public static String sendJsonPost(String url, Object jsonData) {
        String jsonString = JSONUtil.toJsonStr(jsonData);
        log.info("发送 JSON POST 请求,URL: {}, JSON 数据: {}", url, jsonString);
        HttpResponse response = HttpRequest.post(url).body(jsonString).timeout(2000).execute();
        return handleResponse(response);
    }

    // 发送带请求头的 GET 请求
    public static String sendGetWithHeaders(String url, Map<String, String> headers) {
        log.info("发送带请求头的 GET 请求,URL: {}, 请求头: {}", url, headers);
        HttpResponse response = HttpRequest.get(url).headerMap(headers, true).timeout(2000).execute();
        return handleResponse(response);
    }

    // 发送带请求头的 POST 请求
    public static String sendPostWithHeaders(String url, Map<String, Object> paramMap, Map<String, String> headers) {
        log.info("发送带请求头的 POST 请求,URL: {}, 参数: {}, 请求头: {}", url, paramMap, headers);
        HttpResponse response = HttpRequest.post(url).form(paramMap).headerMap(headers, true).timeout(2000).execute();
        return handleResponse(response);
    }

    // 处理响应
    private static String handleResponse(HttpResponse response) {
        int status = response.getStatus();
        if (status == HTTP_OK) {
            String responseBody = response.body();
            log.info("请求成功,状态码:{}, 响应内容:{}", status, responseBody);
            return responseBody;
        } else {
            // 可根据实际需求处理其他状态码
            throw new RuntimeException("请求失败,状态码:" + status);
        }
    }
}

Post请求 这里处理Json使用的是fastjson

        // 拼接URL
        String url = "你的URL";

        // 请求体参数对象 params
        Map<String, Object> params = new HashMap<>();
        params.put("userAccount", "740969606");



        // 创建HTTP请求对象
        HttpRequest post = HttpUtil.createPost(url);

        // 设定请求头
        post.header(Header.CONTENT_TYPE,"application/json");

        // 设定请求体
        post.body(JSONObject.toJSONString(params));
        //post.form(params); //特别说明,form表单提交也在请求体里,但服务接收不一定支持form表单内容


        // 执行请求
        HttpResponse execute = post.timeout(2000).execute();

        // 解析结果
        // FASTJSON用:JSONObject jsonObject = JSONObject.parseObject(execute.body());
        JSONObject jsonObject = JSONUtil.parseObj(response.body());

GET请求

参数放在URL中

        String url = "你要请求的URL";
        StringBuilder urlWithParams =  new StringBuilder(url.trim()).append("?");
        // 请求体参数对象 params
        Map<String, String> params = new LinkedHashMap<>();
        params.put("userAccount", "740969606");

        // 拼接的GET请求的参数内容在URL中
        params.forEach((k,v)->{
            urlWithParams.append(k).append("=").append(v).append("&");
        });
        // 创建Http Get请求对象,同时指定最新带参数的url
        HttpRequest get = HttpUtil.createGet(urlWithParams.toString());
        // 设定请求头
        get.header(Header.AUTHORIZATION,"我是Token");
        // 执行请求
        HttpResponse execute = get.timeout(2000).execute();
        // 解析结果
        JSONObject jsonObject = JSONObject.parseObject(execute.body());
        System.out.println(jsonObject);

参数放在form中

        String GD_WEATHER_URL = "https://restapi.amap.com/v3/weather/weatherInfo";
        StringBuilder urlWithParams = new StringBuilder(GD_WEATHER_URL).append("?");
        // 请求体参数对象 params
        Map<String, Object> params = new LinkedHashMap<>();
        params.put(GD_WEATHER_ARG_KEY, "dc81de5a83995509bd76c6a03d62ee20"); // 个人测试高德API的Key。
        params.put(GD_WEATHER_ARG_CITY, "320211");   // adcode城市编码。可在 查看
        params.put(GD_WEATHER_ARG_EXTENSIONS, "base"); // 可选值:base/all;base:返回实况天气;all:返回预报天气
        params.put(GD_WEATHER_ARG_OUTPUT, "JSON"); // 返回格式;可选值:JSON,XML
        // 创建Http Get请求对象,同时指定最新带参数的url
        HttpRequest get = HttpUtil.createGet(urlWithParams.toString());
        // 执行请求
        HttpResponse execute = get.form(params).timeout(2000).execute();
        // 解析结果
        JSONObject jsonObject = JSONUtil.parseObj(execute.body());
特殊说明:
上述文章均是作者实际操作后产出。烦请各位,请勿直接盗用!转载记得标注原文链接:www.zanglikun.com
第三方平台不会及时更新本文最新内容。如果发现本文资料不全,可访问本人的Java博客搜索:标题关键字。以获取全部资料 ❤