Java http请求工具类

2023-11-02

近期使用json请求很多,数据交互格式统一,方便数据转化,但是过时的工具类在后台之间请求时,发现接收到并不是标准的JSON,请求头也有问题,造成很大的困扰,所以整理了一个标准的工具类。

import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;

import java.io.IOException;
import java.net.URI;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;


/**
 * @Author z
 * @Date 2018年12月29 11:18
 */
public class HttpClientUtil {

	public static String doGet(String url, Map<String, String> param) {

		// 创建Httpclient对象
		CloseableHttpClient httpclient = HttpClients.createDefault();

		String resultString = "";
		CloseableHttpResponse response = null;
		try {
			// 创建uri
			URIBuilder builder = new URIBuilder(url);
			if (param != null) {
				for (String key : param.keySet()) {
					builder.addParameter(key, param.get(key));
				}
			}
			URI uri = builder.build();

			// 创建http GET请求
			HttpGet httpGet = new HttpGet(uri);

			// 执行请求
			response = httpclient.execute(httpGet);
			// 判断返回状态是否为200
			if (response.getStatusLine().getStatusCode() == 200) {
				resultString = EntityUtils.toString(response.getEntity(), "UTF-8");
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				if (response != null) {
					response.close();
				}
				httpclient.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		return resultString;
	}

	public static String doGet(String url) {
		return doGet(url, null);
	}

	public static String doPost(String url, Map<String, Object> param) {
		// 创建Httpclient对象
		CloseableHttpClient httpClient = HttpClients.createDefault();
		CloseableHttpResponse response = null;
		String resultString = "";
		try {
			// 创建Http Post请求
			HttpPost httpPost = new HttpPost(url);
			// 创建参数列表
			if (param != null) {
				List<NameValuePair> paramList = new ArrayList<>();
				for (String key : param.keySet()) {
					paramList.add(new BasicNameValuePair(key, param.get(key).toString()));
				}
				// 模拟表单
				UrlEncodedFormEntity entity = new UrlEncodedFormEntity(paramList);
				httpPost.setEntity(entity);
			}
			// 执行http请求
			response = httpClient.execute(httpPost);
			resultString = EntityUtils.toString(response.getEntity(), "utf-8");
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				response.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}

		return resultString;
	}

	public static String doPost(String url) {
		return doPost(url, null);
	}
	
	public static String doPostJson(String url, String json) {
		// 创建Httpclient对象
		CloseableHttpClient httpClient = HttpClients.createDefault();
		CloseableHttpResponse response = null;
		String resultString = "";
		try {
			// 创建Http Post请求
			HttpPost httpPost = new HttpPost(url);
			// 创建请求内容
			StringEntity entity = new StringEntity(json, ContentType.APPLICATION_JSON);
			httpPost.setEntity(entity);
			// 执行http请求
			response = httpClient.execute(httpPost);
			resultString = EntityUtils.toString(response.getEntity(), "utf-8");
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				response.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}

		return resultString;
	}
}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java http请求工具类 的相关文章

  • 如何为最终用户方便地启动Java GUI程序

    用户想要从以下位置启动 Java GUI 应用程序Windows 以及一些额外的 JVM 参数 例如 javaw Djava util logging config file logging properties jar MyGUI jar
  • Java Swing:从 JOptionPane 获取文本值

    我想创建一个用于 POS 系统的新窗口 用户输入的是客户拥有的金额 并且窗口必须显示兑换金额 我是新来的JOptionPane功能 我一直在使用JAVAFX并且它是不同的 这是我的代码 public static void main Str
  • Spring Batch 多线程 - 如何使每个线程读取唯一的记录?

    这个问题在很多论坛上都被问过很多次了 但我没有看到适合我的答案 我正在尝试在我的 Spring Batch 实现中实现多线程步骤 有一个包含 100k 条记录的临时表 想要在 10 个线程中处理它 每个线程的提交间隔为 300 因此在任何时
  • 为什么 i++ 不是原子的?

    Why is i Java 中不是原子的 为了更深入地了解 Java 我尝试计算线程中循环的执行频率 所以我用了一个 private static int total 0 在主课中 我有两个线程 主题 1 打印System out prin
  • Java EE:如何获取我的应用程序的 URL?

    在 Java EE 中 如何动态检索应用程序的完整 URL 例如 如果 URL 是 localhost 8080 myapplication 我想要一个可以简单地将其作为字符串或其他形式返回给我的方法 我正在运行 GlassFish 作为应
  • 在 java 类和 android 活动之间传输时音频不清晰

    我有一个android活动 它连接到一个java类并以套接字的形式向它发送数据包 该类接收声音数据包并将它们扔到 PC 扬声器 该代码运行良好 但在 PC 扬声器中播放声音时会出现持续的抖动 中断 安卓活动 public class Sen
  • Final字段的线程安全

    假设我有一个 JavaBeanUser这是从另一个线程更新的 如下所示 public class A private final User user public A User user this user user public void
  • 为什么HashMap不能保证map的顺序随着时间的推移保持不变

    我在这里阅读有关 Hashmap 和 Hashtable 之间的区别 http javarevisited blogspot sg 2010 10 difference Between hashmap and html http javar
  • JRE 系统库 [WebSphere v6.1 JRE](未绑定)

    将项目导入 Eclipse 后 我的构建路径中出现以下错误 JRE System Library WebSphere v6 1 JRE unbound 谁知道怎么修它 右键单击项目 特性 gt Java 构建路径 gt 图书馆 gt JRE
  • 总是使用 Final?

    我读过 将某些东西做成最终的 然后在循环中使用它会带来更好的性能 但这对一切都有好处吗 我有很多地方没有循环 但我将 Final 添加到局部变量中 它会使速度变慢还是仍然很好 还有一些地方我有一个全局变量final 例如android Pa
  • AWS 无法从 START_OBJECT 中反序列化 java.lang.String 实例

    我创建了一个 Lambda 函数 我想在 API 网关的帮助下通过 URL 访问它 我已经把一切都设置好了 我还创建了一个application jsonAPI Gateway 中的正文映射模板如下所示 input input params
  • 仅将 char[] 的一部分复制到 String 中

    我有一个数组 char ch 我的问题如下 如何将 ch 2 到 ch 7 的值合并到字符串中 我想在不循环 char 数组的情况下实现这一点 有什么建议么 感谢您花时间回答我的问题 Use new String value offset
  • Java执行器服务线程池[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 如果我使用 Executor 框架在
  • Android 中麦克风的后台访问

    是否可以通过 Android 手机上的后台应用程序 服务 持续监控麦克风 我想做的一些想法 不断聆听背景中的声音信号 收到 有趣的 音频信号后 执行一些网络操作 如果前台应用程序需要的话 后台应用程序必须能够智能地放弃对麦克风的访问 除非可
  • 如何从指定日期获取上周五的日期? [复制]

    这个问题在这里已经有答案了 如何找出上一个 上一个 星期五 或指定日期的任何其他日期的日期 public getDateOnDay Date date String dayName 我不会给出答案 先自己尝试一下 但是 也许这些提示可以帮助
  • 如何在桌面浏览器上使用 webdriver 移动网络

    我正在使用 selenium webdriver 进行 AUT 被测应用程序 的功能测试自动化 AUT 是响应式网络 我几乎完成了桌面浏览器的不同测试用例 现在 相同的测试用例也适用于移动浏览器 因为可以从移动浏览器访问 AUT 由于它是响
  • 玩!框架:运行“h2-browser”可以运行,但网页不可用

    当我运行命令时activator h2 browser它会使用以下 url 打开浏览器 192 168 1 17 8082 但我得到 使用 Chrome 此网页无法使用 奇怪的是它以前确实有效 从那时起我唯一改变的是JAVA OPTS以启用
  • 静态变量的线程安全

    class ABC implements Runnable private static int a private static int b public void run 我有一个如上所述的 Java 类 我有这个类的多个线程 在里面r
  • 使用 JMF 创建 RTP 流时出现问题

    我正处于一个项目的早期阶段 需要使用 RTP 广播DataStream创建自MediaLocation 我正在遵循一些示例代码 该代码目前在rptManager initalize localAddress 出现错误 无法打开本地数据端口
  • 按日期对 RecyclerView 进行排序

    我正在尝试按日期对 RecyclerView 进行排序 但我尝试了太多的事情 我不知道现在该尝试什么 问题就出在这条线上适配器 notifyDataSetChanged 因为如果我不放 不会显示错误 但也不会更新 recyclerview

随机推荐

  • DATA_FORMAT = 'NCHW' 和DATA_FORMAT = 'CHWN'

    转载自https blog csdn net qq 39622065 article details 81228915 NHWC batch in height in width in channels NCHW batch in chan
  • nginx日志文件删除后空间不能释放,必须重启服务才能释放空间

    一台nginx服务器发现磁盘空间撑爆了 进去看全是日志文件把磁盘写满了 可是用rm删除log文件后发现磁盘空间并没有被释放 明明文件没有了呀 郁闷 于是google下 未释放磁盘空间原因 在Linux或者Unix系统中 通过rm或者文件管理
  • 千万级规模高性能、高并发的网络架构经验分享

    from https www cnblogs com shanyou p 5048099 html utm source tuicool utm medium referral 架构以及我理解中架构的本质 在开始谈我对架构本质的理解之前 先
  • 最长回文---Manacher算法解析(俗称:马拉车算法)

    题目链接 https cn vjudge net contest 320014 problem E Problem Description 给出一个只由小写英文字符a b c y z组成的字符串S 求S中最长回文串的长度 回文就是正反读都是
  • vsCode快捷方式设置(ubuntu版本)

    ubuntu版本的vscode 快捷键设置的地方 文件 gt 首选项 gt 键盘快捷方式 按键绑定 gt 更改按键绑定
  • <<软件研发之道>>经验法则4---不要认为别人是笨蛋

    转载自 http book 51cto com art 201107 277211 htm 参考书籍 lt lt 软件研发之道 gt gt 我在这里重申 软件是一种知识产权 你必须运用智慧才能开发出软件 你在工作中调用的智慧越多 你最终得到
  • 特征工程之分箱

    一般在建立分类模型时 需要对连续变量离散化 特征离散化后 模型会更稳定 降低了模型过拟合的风险 比如在建立申请评分卡模型时用logsitic作为基模型就需要对连续变量进行离散化 离散化通常采用分箱法 分箱的重要性及其优势 离散特征的增加和减
  • 测试用例编写方法_划分等价类

    一 划分等价类概述 计算两个1 100之间整数的和 穷举测试 1 2 3 1 3 4 1 4 5 1 100 101 100 1 101 100 2 102 100 3 103 100 100 200 这样肯定是不行的 我们需要分析 二 等
  • 数据库原理实验报告【全集】

    如果对你有帮助 记得点赞哦 实验1 8 SQL Server 2008的安装及管理工具的使用 SQL Server数据库的管理 SQL Server数据表的管理 数据查询 索引和视图 数据完整性 Transact SQL程序设计 存储过程和
  • 如何在 XMind 中绘制流程图?

    进阶教程 如何在 XMind 中绘制流程图 XMind 是专业强大的思维导图软件 由于其结构没有任何限制 很多朋友特别喜欢用它来绘制流程图 禁不住大家的多次询问 今天 GTQ28就将这简单的流程图绘图方法分享给大家 在 XMind 中 绘制
  • matlab声音信号处理 频率图 信号过滤和播放声音

    1 内容简介 略 425 可以交流 咨询 答疑 2 内容说明 略 3 仿真分析 clear clc close all mini project x fs audioread mini proj wav x x 1 N length x n
  • python执行js代码进行aes加解密以及python代码与前端交互加解密

    在前后端交互的过程中 基于安全考虑 往往需要对某些数据进行加密传输 我们以传输密码为例 如果密码明文传输的话 有被截取的风险 因此我们可以考虑采取rsa加密或者aes加密的方式 本文采用aes加密的方法进行传输 aes加解密 前后端要商定好
  • 11张网络安全思维导图,运维快收藏起来强化你的服务器吧!

    本文包含以下思维导图 网络安全绪论 扫描与防御技术 网络监听及防御技术 口令破解及防御技术 欺骗攻击及防御技术 拒绝服务供给与防御技术 缓冲区溢出攻击及防御技术 Web攻击及防御技术 木马攻击与防御技术 计算机病毒 网络安全发展与未来 网络
  • 如何在网上赚钱,下班兼职赚钱,这8种方法或许有适合你的

    网上赚钱 简称 网赚 网赚 主要是指利用计算机 服务器等设备 通过互联网上的各种信息差 从互联网上赚钱的一种方式 兼职赚钱 简单点说就是 你有一份自己的工作是正职 除此之外你还可以再找一份别的工作作为副职 就是工作的同时 兼作另一份工作 叫
  • windows 查看端口占用情况

    方法一 开始 运行 cmd 进入命令提示符 输入netstat ano 即可看到所有连接的PID 之后在任务管理器中找到这个PID所对应的程序如果任务管理器中没有PID这一项 可以在任务管理器中选 查看 选择列 方法二 查看所有的端口占用情
  • 牛客网刷题笔记

    本来想在牛客网上刷完一道在线编程题后就写以下体会笔记 可是找了半天都没找到在哪里写东西 无奈 我就只好来CSDN上写了 只是想写而已 刚开始写 肯定会很不理想 但是没关系 慢慢写吧 总会有提高的 今天在牛客网刷了一道求最长字串是回文数的长度
  • android中出现javax.net.ssl.SSLPeerUnverifiedException的解决方案

    javax net ssl SSLPeerUnverifiedException No peer certificate的错误 根据有关资料解决如下 1 编写SSLSocketFactoryEx 以代替原有的SSLSocketFactory
  • activiti7-4-流程激活和挂起

    我是一个目录 1 分析 2 全部流程实例的挂起和激活 3 单个流程实例挂起 1 分析 如果公司制度发生变化 1 原本没有批完的流程怎么办 例如 30人没有处理完 怎么办 看公司制度了 有可能 按原来的走 也有可能全部打回 重新发起 全部按照
  • windows创建软连接

    可用于地址映射 方便统一配置管理 打开cmd执行 创建命令 指令 软连接地址 实际地址 mklink J D bwopt booway bwss D Java Project main insenattendance bwopt boowa
  • Java http请求工具类

    近期使用json请求很多 数据交互格式统一 方便数据转化 但是过时的工具类在后台之间请求时 发现接收到并不是标准的JSON 请求头也有问题 造成很大的困扰 所以整理了一个标准的工具类 import org apache http NameV