HttpUtils工具类

作为Java开发程序员,需要我们经常写一些工具类来简化开发过程,我们自己肯定写过或者用过HttpUtils用来发送http请求,但是每次手写太繁琐了,于是就按照标准写了一个Http工具类,现在分享出来。

1.HTTP请求简介

HTTP(Hypertest Transfer Protocol)是用于传输像HTML这样的超文本文件的应用层协议。它被设计用于WEB浏览器端和WEB服务端的交互,但也有其它用途。HTTP遵循经典的client-server模型,客户端发起请求尝试建立连接,然后等待服务端的应答。HTTP是无状态协议,这意味着服务端在两次请求间不会记录任何状态。

2.Http请求四要素

一个HTTP请求报文由四个部分组成:请求行、请求头部、空行、请求数据。

1、请求行

请求行由请求方法字段、URL字段和HTTP协议版本字段3个字段组成,它们用空格分隔。

2、请求头部

HTTP客户程序(例如浏览器),向服务器发送请求的时候必须指明请求类型(一般是GET或者POST)。如有必要,客户程序还可以选择发送其他的请求头。大多数请求头并不是必需的,但Content-Length除外。对于POST请求来说Content-Length必须出现。

3、空行

它的作用是通过一个空行,告诉服务器请求头部到此为止。

4、请求数据

若方法字段是GET,则此项为空,没有数据。若方法字段是POST,则通常来说此处放置的就是要提交的数据。

HttpUtils的代码

package com.zuoan.utils;import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;
import org.apache.http.Consts;
import org.apache.http.HttpEntity;
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.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.util.ArrayList;
import java.util.List;
import java.util.Map;public class HttpUtil {private static final CloseableHttpClient httpclient = HttpClients.createDefault();private static final String userAgent = "Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.87 Safari/537.36";/*** 发送HttpGet请求*/public static String sendGet(String url, String token) {String result = null;CloseableHttpResponse response = null;try {URIBuilder uriBuilder = new URIBuilder(url);HttpGet httpGet = new HttpGet(url);httpGet.setHeader("User-Agent", userAgent);httpGet.setHeader("Authorization", "token " + token);response = httpclient.execute(httpGet);HttpEntity entity = response.getEntity();if (entity != null) {result = EntityUtils.toString(entity);}} catch (Exception e) {log.error("处理失败 {}" + e);e.printStackTrace();} finally {if (response != null) {try {response.close();} catch (IOException e) {log.error(e.getMessage());}}}return result;}/*** 发送HttpGet请求,参数为map格式*/public static String sendGet(String url, Map<String, String> map) {String result = null;CloseableHttpResponse response = null;try {URIBuilder uriBuilder = new URIBuilder(url);for (Map.Entry<String, String> entry : map.entrySet()) {uriBuilder.setParameter(entry.getKey(), entry.getValue());}HttpGet httpGet = new HttpGet(uriBuilder.build());httpGet.setHeader("User-Agent", userAgent);response = httpclient.execute(httpGet);HttpEntity entity = response.getEntity();if (entity != null) {result = EntityUtils.toString(entity);}} catch (Exception e) {log.error("处理失败 {}" + e);e.printStackTrace();} finally {if (response != null) {try {response.close();} catch (IOException e) {log.error(e.getMessage());}}}return result;}/*** 发送HttpPost请求,参数为map*/public static String sendPost(String url, Map<String, String> map) {// 设置参数List<NameValuePair> formparams = new ArrayList<NameValuePair>();for (Map.Entry<String, String> entry : map.entrySet()) {formparams.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));}// 编码UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(formparams, Consts.UTF_8);// 设置content-typeformEntity.setContentType("application/json");// 取得HttpPost对象HttpPost httpPost = new HttpPost(url);// 防止被当成攻击添加的httpPost.setHeader("User-Agent", userAgent);// 接收参数设置httpPost.setHeader("Accept", "application/json");// 参数放入EntityhttpPost.setEntity(formEntity);CloseableHttpResponse response = null;String result = null;try {// 执行post请求response = httpclient.execute(httpPost);// 得到entityHttpEntity entity = response.getEntity();// 得到字符串result = EntityUtils.toString(entity);} catch (IOException e) {log.error(e.getMessage());} finally {if (response != null) {try {response.close();} catch (IOException e) {log.error(e.getMessage());}}}return result;}/*** 发送HttpPost请求,参数为json字符串*/public static String sendPost(String url, String jsonStr) {String result = null;// 字符串编码StringEntity entity = new StringEntity(jsonStr, Consts.UTF_8);// 设置content-typeentity.setContentType("application/json");HttpPost httpPost = new HttpPost(url);// 防止被当成攻击添加的httpPost.setHeader("User-Agent", userAgent);// 接收参数设置httpPost.setHeader("Accept", "application/json");httpPost.setEntity(entity);CloseableHttpResponse response = null;try {response = httpclient.execute(httpPost);HttpEntity httpEntity = response.getEntity();result = EntityUtils.toString(httpEntity);} catch (IOException e) {log.error(e.getMessage());} finally {// 关闭CloseableHttpResponseif (response != null) {try {response.close();} catch (IOException e) {log.error(e.getMessage());}}}return result;}/*** 发送不带参数的HttpPost请求*/public static String sendPost(String url) {String result = null;// 得到一个HttpPost对象HttpPost httpPost = new HttpPost(url);// 防止被当成攻击添加的httpPost.setHeader("User-Agent", userAgent);CloseableHttpResponse response = null;try {// 执行HttpPost请求,并得到一个CloseableHttpResponseresponse = httpclient.execute(httpPost);// 从CloseableHttpResponse中拿到HttpEntityHttpEntity entity = response.getEntity();// 将HttpEntity转换为字符串result = EntityUtils.toString(entity);} catch (IOException e) {log.error(e.getMessage());} finally {// 关闭CloseableHttpResponseif (response != null) {try {response.close();} catch (IOException e) {log.error(e.getMessage());}}}return result;}
}

若觉得文章对您有用,不妨 关注 + 收藏 哦!!更多实用文章在首页!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/135580.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SSM 线上知识竞赛系统-计算机毕设 附源码 27170

SSM线上知识竞赛系统 摘 要 科技进步的飞速发展引起人们日常生活的巨大变化&#xff0c;电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用。信息时代的到来已成为不可阻挡的时尚潮流&#xff0c;人类发展的历史正进入一个新时代。在现实运用中&#…

虚幻引擎:如何使用 独立进程模式进行模拟

第一步:先更改配置 第二步,在启动的两个玩家里面,一个设为服务器,一个链接进去地图就可以了 1.设置服务器 2.另一个玩家链接

企业级低代码开发,科技赋能让企业具备“驾驭软件的能力”

科技作为第一生产力&#xff0c;其强大的影响力在各个领域中都有所体现。数字技术&#xff0c;作为科技领域中的一股重要力量&#xff0c;正在对传统的商业模式进行深度的变革&#xff0c;为各行业注入新的生命力。随着数字技术的不断发展和应用&#xff0c;企业数字化转型的趋…

远程运维用什么软件?可以保障更安全?

远程运维顾名思义就是通过远程的方式IT设备等运行、维护。远程运维适用场景包含因疫情居家办公&#xff0c;包含放假期间出现运维故障远程解决&#xff0c;包含项目太远需要远程操作等等。但远程运维过程存在一定风险&#xff0c;安全性无法保障&#xff0c;所以一定要选择靠谱…

RocketMQ如何安全的批量发送消息❓

优点&#xff1a; 批量发送消息可以提高rocketmq的生产者性能和吞吐量。 使用场景: 发送大量小型消息时&#xff1b;需要降低消息发送延迟时&#xff1b;需要提高生产者性能时&#xff1b; 注意事项&#xff1a; 消息列表的大小不能超过broker设置的最大消息大小;消息列表…

如何快速教你看自己电脑cpu是几核几线程

目录 一、我们日常中说的电脑多少核多少线程&#xff0c;很多人具体不知道什么意思&#xff0c;下面举例4核和4线程什么意思。二、那么4线程又是怎么回事呢&#xff1f;三、那么知道了上面的介绍后怎么看一台电脑是几核&#xff0c;几线程呢&#xff1f; 一、我们日常中说的电脑…

JSONP 跨域访问(2), JSONP劫持

JSONP 跨域访问(2), JSONP劫持 一, 利用 XSS 漏洞执行jsonp 1. 利用过程 发现有jsonp的请求: <script type"text/javascript" src"http://192.168.112.200/security/jsonp.php?callbackjsonpCallback"></script>向xss漏洞的位置注入代码…

​软考-高级-信息系统项目管理师教程 第四版【第24章-法律法规与标准规范-思维导图】​

软考-高级-信息系统项目管理师教程 第四版【第24章-法律法规与标准规范-思维导图】 课本里章节里所有蓝色字体的思维导图

springboot 项目升级 2.7.16 踩坑

记录一下项目更新版本依赖踩坑 这个是项目最早的版本依赖 这里最初是最初是升级到 2.5.7 偷了个懒 这个版本的兼容性比较强 就选了这版本 也不用去修改就手动的去换了一下RabbitMQ的依赖 因为这边项目有AMQP 风险预警 1.spring-amqp版本低于2.4.17的用户应升级到2.4.17 2.spri…

时序预测 | MATLAB实现WOA-CNN-BiLSTM-Attention时间序列预测(SE注意力机制)

时序预测 | MATLAB实现WOA-CNN-BiLSTM-Attention时间序列预测&#xff08;SE注意力机制&#xff09; 目录 时序预测 | MATLAB实现WOA-CNN-BiLSTM-Attention时间序列预测&#xff08;SE注意力机制&#xff09;预测效果基本描述模型描述程序设计参考资料 预测效果 基本描述 1.MAT…

蓝桥杯官网练习题(移动距离)

题目描述 X 星球居民小区的楼房全是一样的&#xff0c;并且按矩阵样式排列。其楼房的编号为 1,2,3, 当排满一行时&#xff0c;从下一行相邻的楼往反方向排号。 比如&#xff1a;当小区排号宽度为 6 时&#xff0c;开始情形如下&#xff1a; 1 2 3 4 5 6 12 …

python模块之redisbloom redis布隆过滤器

一、简介 RedisBloom 是一个 Redis 模块&#xff0c;提供了布隆过滤器&#xff08;Bloom Filter&#xff09;、计数器&#xff08;Count-Min Sketch&#xff09;、Top-K&#xff08;Top-K&#xff09;、Top-K with expiry&#xff08;Top-K with Expiration&#xff09;和多样…

开发知识点-golang

golang语言学习 环境搭建win10配置go环境 ubuntu20.04安装golang介绍下载 Go 压缩包调整环境变量验证 Go 安装过程 环境搭建 win10配置go环境 中文网进行下载 https://studygolang.com/dl 配置环境变量 增加GOROOT: 新建 -->变量名为: GOROOT(必须大写) 变量值: 你安装…

2311rust无畏并发.

原文 Rust无畏并发 Rust是为了解决两个麻烦问题: 1,如何安全系统编程 2,如何无畏并发 最初,这些问题似乎是无关的,但令惊讶的是,方法竟然是相同的:使Rust安全的相同工具也可帮助解决并发问题. 内存安全和并发错误,一般认为是代码在不应访问数据时访问数据.Rust依靠所有权为…

删除word最后一页之后的空白页

最近编辑word比较多&#xff0c;有时最后一页&#xff08;最后一页内容还有可能是表格&#xff09;之后&#xff0c;还有一页空白页&#xff0c;单独按下backspace、del都删不掉&#xff0c;很让人着急。 经过查询有几种方法&#xff1a; &#xff08;1&#xff09;点击选中空…

12、填写NGINX配置部署前端;运行jar部署后端

后端可以部署的方式&#xff0c;首先直接运行jar是肯定可以的。此外&#xff0c;可以单独开docker容器运行在容器中。 但是这里运行在容器中必要性&#xff0c;其实并不大。 当前我们直接运行jar来运行后端。后面推出集成docker。 直接运行jar包的方式&#xff0c;首先需要打…

Spark Streaming

Spark Streaming Spark Streaming概念Spark Streaming操作1 netcat传入数据2 DStream 创建3 自定义数据源4 接受kafka数据DStream 转换1无状态的转换2有状态的转换updateSateByKeyWindowOperations Spark Streaming概念 Spark Streaming 用于流式数据的处理。 Spark Streaming…

临界资源,临界区,通信的干扰问题(互斥),信号量(本质,上下文切换问题,原子性,自身的安全性,操作)

目录 引入 概念 临界资源 临界区 干扰存在原因 互斥 信号量 引入 举例 概念 介绍 表示可用资源数 表示等待进程数 申请信号量 信号量的本质 全局变量? 共享内存? 不安全问题 -- 上下文切换 原子性 信号量自身的安全性 原子操作的意义 操作 引入 通信…

Collection集合 迭代器遍历Iterator 和集合增强For

迭代器遍历Iterator 标准写法: 增强For for(类型 名称 : 集合 ) 举例: 不仅可以集合也可以数组 底层仍然是iterator

【MySQL】约束

一、基本概念 1、什么是约束 约束是表级的强制规定 2、为什么使用约束 是为了保证表中数据的完整性&#xff0c;完整性又可以拆分为精确性和可靠性 3、怎么去保证数据完整性呢&#xff0c;从以下四个角度进行考虑 实体完整性&#xff1a;一张表中&#xff0c;不能存在两条完…