使用CloseableHttpClient 模拟发送HttpGet和HttpPost请求

article/2025/10/7 1:55:21

项目中经常会用到模拟Http请求,而jdk 下的 rt.jar核心库中也有 java.net提供了这方面的功能,但是总体而言,功能还是缺少灵活性和全面性,HttpClient的出现就是弥补了其缺失的功能。HttpClient不是浏览器客户端,而是一个客户端和服务端实现通信的Http组件库。本篇文章主要讲解CloseableHttpClient 的使用。

1. 项目中添加依赖的jar包

   

2. 上代码,代码中详细介绍每个部分的作用

2.1 模拟HttpGet请求 

/**
 * 模拟HttpGet 请求
 * @param url
 * @return
 */
public static String HttpGet(String url){//单位毫秒
    RequestConfig requestConfig = RequestConfig.custom().setConnectionRequestTimeout(3000).setConnectTimeout(3000).setSocketTimeout(3000).build();//设置请求的状态参数

    CloseableHttpClient httpclient = HttpClients.createDefault();//创建 CloseableHttpClient 
    HttpGet httpGet = new HttpGet(url);
    httpGet.setConfig(requestConfig);

    CloseableHttpResponse response = null;
    try {response = httpclient.execute(httpGet);//返回请求执行结果
        int statusCode = response.getStatusLine().getStatusCode();//获取返回的状态值
        if (statusCode != HttpStatus.SC_OK) {return null;
        } else {String result = EntityUtils.toString(response.getEntity(), "UTF-8");
            return result;
        }} catch (Exception e) {logger.error("httpget Exception handle-- > " + e);
    } finally {if (response != null){try {response.close();//关闭response
            } catch (IOException e) {logger.error("httpget IOException handle-- > " + e);
            }}if(httpclient != null){try {httpclient.close();//关闭httpclient
            } catch (IOException e) {logger.error("httpget IOException handle-- > " + e);
            }}}return null;
}

2.2 模拟HttpPost请求

/**
 * 模拟HttpPost请求
 * @param url
 * @param jsonString
 * @return
 */
public static String HttpPost(String url, String jsonString){
    CloseableHttpResponse response = null;
    CloseableHttpClient httpClient = HttpClientBuilder.create().build();//创建CloseableHttpClient
    HttpPost httpPost = new HttpPost(url);//实现HttpPost
    RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(3000).setConnectTimeout(3000).build();
    httpPost.setConfig(requestConfig); //设置httpPost的状态参数
    httpPost.addHeader("Content-Type", "application/json");//设置httpPost的请求头中的MIME类型为json
    StringEntity requestEntity = new StringEntity(jsonString, "utf-8");
    httpPost.setEntity(requestEntity);//设置请求体
    try {response = httpClient.execute(httpPost, new BasicHttpContext());//执行请求返回结果
        if (response.getStatusLine().getStatusCode() != HttpStatus.SC_OK) {return null;
        }HttpEntity entity = response.getEntity();
        if (entity != null) {String resultStr = EntityUtils.toString(entity, "utf-8");
            return resultStr;
        } else {return null;
        }} catch (Exception e) {logger.error("httpPost method exception handle-- > " + e);
        return null;
    } finally {if (response != null){try {response.close();//最后关闭response
            } catch (IOException e) {logger.error("httpPost method IOException handle -- > " + e);
            }}if(httpClient != null){try {httpClient.close();} catch (IOException e) {logger.error("httpPost method exception handle-- > " + e);}}}}


http://chatgpt.dhexx.cn/article/XuhLnFxM.shtml

相关文章

python实现http get请求

接口请求方式为get请求,如下图抓包查看 Python实现脚本请求接口并以中文打印接口返回的数据 遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939 寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电…

我是如何实现HttpGet请求传body参数的?

点击关注公众号,利用碎片时间学习 前言 最近调用公司项目一个接口时,发现该接口是一个Get请求,入参在Body 中(json格式)。 场景如下:A服务需发送http请求调用B服务的接口(该接口为Get方式&#…

HTTP get方式传json

文章目录 一、背景?二、尝试的过程1.postman(成功)2.hutool(失败)3.AsyncHttpClient(成功) 总结 一、背景? 最近项目中有个三方接口,需要使用get请求传递json, 这个让人有点懵,一般来说get参数都会直接拼接在url后, 复杂的参数都使用post方式传递, 尝试…

HTTP GET请求的最大长度?

HTTP GET请求的最大长度是多少? 是否定义了一个响应错误,如果服务器收到超过此长度的GET请求,服务器可以/应该返回该错误? 更新:如标记中所示,这是在Web服务API的上下文中,尽管也很有趣地看到了…

Arduino ESP32 获取网络数据(HTTP GET方式)

Arduino ESP32 获取网络数据(HTTP GET方式) 相关篇《Arduino ESP32 获取网络数据(HTTP POST方式)》《Arduino ESP32 获取网络数据(HTTP PATCH方式)》《Arduino ESP32 获取网络数据(HTTP PUT方式)》 本实例介绍,ESP32通过联网,访问指定服务器网站&#xf…

HTTP - get/post请求详解与本质区别总结

前言 在客户机和服务器之间进行请求、响应时,两种最常被用到的方法是:get和post。 get:从指定的资源请求数据(从服务器获取数据) post:向指定的资源提交要被处理的数据(向服务器传送数据&#…

transferTo源码分析

transferTo源码分析 如图

netty(五) 【 transferTo 零拷贝实例】

前言: 在linux 中 transferTo 方法就可以完成传输,在 windows 中依次调用transferTo最多能传8M文件,需要分段传文件,而且要注意传输起点位置 模拟服务端实验源码: package com.dev.nio.TRANSFERTO;import java.io.IO…

MultipartFile的transferTo方法的坑

前言 最近用SpringBoot写文件上传功能,使用参数绑定之后确实是非常的方便了。但是,项目部署就出现了问题,搞得我一脸懵逼。后来,才发现是因为我使用了相对路径导致的,这个绝对是一个坑人的地方,不过也说明需…

通过零拷贝进行有效的数据传输(java、c)

目录 日期转移:传统方法 数据传输:零复制方法 构建文件服务器 性能比较 概要 相关阅读 许多Web应用程序提供大量的静态内容,这相当于从磁盘上读取数据并将完全相同的数据写回响应套接字。该活动似乎需要较少的CPU活动,但效率…

NIO中的零拷贝--transferTo

1、我们说零拷贝,是从操作系统的角度来说的。因为内核缓冲区之间,没有数据是 重复的(只有 kernel buffer 有一份数据)。 2、零拷贝不仅仅带来更少的数据复制,还能带来其他的性能优势,例如更少的上下 文切…

使用transferTo上传文件容器为jetty的问题

报错 springboot 内嵌的 tomcat替换jetty 9.4.44 后出现的问题。 jetty容器使用transferTo 上传问题会提示找不到文件。 ava.io.FileNotFoundException: C:\Users\XXX\AppData\Local\Temp\D:\workspace\1675246694267.xlsx(文件名、目录名或卷标语法不正确。) 跟进代码发现 是下…

Java很简单的文件上传(transferTo方式)

采用file.Transto 来保存上传的文件,代码简单,速度快. package com.springbootemaildemo.controller;import com.springbootemaildemo.entity.ResponseEntity; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import…

动态规划题目2

动态规划 跳跃游戏 VI (滑动窗口动态规划)丑数统计字典序元音字符串的数目最长重复子串分隔数组以得到最大和最低票价回文子串最长重复子数组最长回文子序列摆动序列旋转函数统计各位数字都不同的数字个数 (动规排列组合)最大整除子集猜数字大小 II超级丑数预测赢家栅栏涂色丑数…

动态规划专题精讲1

致前行的人: 要努力,但不要着急,繁花锦簇,硕果累累都需要过程! 前言: 本篇文章为大家带来一种重要的算法题,就是动态规划类型相关的题目,动态规划类的题目在笔试和面试中是考察非常高…

Java实现动态规划经典题目

动态规划入门请看: DP动态规划专题(一)动态规划基本模型 前言 【说明】 关于动态规划的见解:动规和递归有很多相似的地方,最显著的特征可以说是阶段性,二者都有很明显的阶段划分,所以&#xf…

十一、动态规划题目相关

学习来源: 代码随香录:https://www.programmercarl.com/ labuladong算法:https://labuladong.github.io/algo/ 动态规划 动态规划五部曲 确定dp数组(dp table)以及下标的含义 确定递推公式 dp数组如何初始化 确定遍历…

动态规划题目汇总

文章目录 序言题目一:古生物血缘远近判定题目二:迷宫I题目三:迷宫II题目四:出界的路径数题目五:最长公共字串题目六:最长递增子序列题目七:递增的三元子序列题目八:最长回文字串题目…

动态规划经典例题:不同路径

力扣上比较简答的一道动态规划题目。 方程&#xff1a; class Solution { public:int uniquePaths(int m, int n) {const int M m;const int N n;int dp[M][N];memset(dp, 0, sizeof(dp));for (int i 0; i < m; i) dp[i][0] 1;for (int i 0; i < n; i) dp[0][i] 1;…

动态规划算法与典型例题

目录 前言 一、动态规划要素&#xff08;条件&#xff09; 二、动态规划算法设计步骤 三、复杂度分析 四、典型例题1——游艇租聘 五、典型例题2——0-1背包问题 六、典型例题3——跳台阶问题 七、典型例题4——强盗抢劫问题 总结 前言 动态规划也是一种分治思想&…