百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

Apache组件HttpPost使用方法

myzbx 2025-01-13 16:00 16 浏览

需求:

1.java模拟https协议请求,屏蔽SSL校验报错问题

2.将map转成form表单形式提交后台服务。



import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
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.HttpPost;
import org.apache.http.conn.ssl.AllowAllHostnameVerifier;
import org.apache.http.conn.ssl.X509HostnameVerifier;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.ssl.SSLContextBuilder;
import org.apache.http.util.EntityUtils;

import javax.net.ssl.SSLContext;
import java.io.IOException;
import java.security.cert.X509Certificate;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
* 使用HttpPost 提交form请求
*1。去掉SSL证书校验,使用自定义SSLContext和主机名验证器。
* 2。构建请求参数:
使用 List<NameValuePair> 来存储请求参数。
遍历 paramsMap,将每个键值对添加到 params 列表中。
设置请求体:
使用 UrlEncodedFormEntity 将 params 列表转换为表单格式的请求体。
设置编码为 UTF-8。
执行请求:
使用 httpClient.execute(httpPost) 发送请求,并处理响应。
通过这种方式,你可以确保请求体以 application/x-www-form-urlencoded 格式提交,符合表单提交的标准。
*/
public class HttpClientExample {
private static ObjectMapper objectMapper = new ObjectMapper();

public static void main(String[] args) throws Exception {
// 创建SSLContext来忽略证书验证
SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, (X509Certificate[] chain, String authType) -> true).build();
// 设置主机名验证器(通常不建议关闭)
X509HostnameVerifier hostnameVerifier = new AllowAllHostnameVerifier(); // 使用自定义SSLContext创建CloseableHttpClient

CloseableHttpClient httpClient = HttpClients.custom().setSSLContext(sslContext).setHostnameVerifier(hostnameVerifier).build();
// 1. 创建HttpRequest对象 - 指定好 url 地址
HttpPost httpPost = new HttpPost("https://www.baidu.com"); //

Map<String, Object> paramsMap = new HashMap();
paramsMap.put("name", "test");
paramsMap.put("password", "test");
//form表单提交内容
List<NameValuePair> params = new ArrayList<>();
for (Map.Entry<String, Object> entry : paramsMap.entrySet()) {
params.add(new BasicNameValuePair(entry.getKey(), String.valueOf(entry.getValue())));
}
// 设置请求体为 UrlEncodedFormEntity
httpPost.setEntity(new UrlEncodedFormEntity(params, "UTF-8"));//请求报文体

Map dataMap =null;
try {
CloseableHttpResponse response = httpClient.execute(httpPost);
// 处理响应
int statusCode = response.getStatusLine().getStatusCode();
if (statusCode == 200) {
String responseBody = null;
try {
responseBody = EntityUtils.toString(response.getEntity(), "UTF-8");
} catch (IOException e) {
throw new RuntimeException(e);
}
try {
Map responseMap = objectMapper.readValue(responseBody, Map.class);
System.out.println("返回报文:"+responseMap);
} catch (JsonProcessingException e) {
throw new RuntimeException(e);
}
} else {
throw new RuntimeException("Failed to perform check-in. Status code: " + statusCode);
}
} catch (IOException e) {
throw new RuntimeException(e);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}




相关推荐

为什么钟表的指针是从左向右顺时针转?

所有的钟表指针都是从左向右转的,所以我们就用它来表示旋转方向了。那么,为什么钟表都是从左向右转呢?正着转也好,反着转也好,一圈不都是12小时吗?这就要从钟表的前身说起了。在钟表出现之前,人们使用过一种...

牛人将电子钟改造高精度时钟,日误差0.26秒!解决走时不准通病

家里有好多个电子钟,精度各种参差不齐,然后走时就是各种混乱,是可忍孰不可忍……自打发现8025这个好玩意儿之后,就决定不忍了。第一个上场的聪明钟,为啥叫聪明钟然后还走的不准。三节电池供电,其中3V给主...

篮球裁判手势图解之计时钟、得分替换和暂停手势

▋篮球裁判手势图解之计时钟手势停止计时钟手势,伸开手掌,垂直举过头部。犯规停止计时钟手势,一拳握紧,垂直举过头部。计时开始手势,用手做劈柴动作,将垂直举过头部的手放下。▋篮球裁判手势图解之得分手势1...

罗马数字的起源与用途

一、罗马数字的诞生与进化罗马数字起源于古罗马帝国,拥有一个漫长而复杂的历史,始于公元前8世纪至9世纪,与古罗马帝国在帕兰丁山(PalantineHill)周围建立的时间大致相同。不过,罗马数...

基于 Arduino Nano R3 的红外遥控数字时钟

由于在ArduinoNano上没有足够的引脚来编写代码,该项目只有有限的功能(即使没有设置时间的设施)。通过添加红外线遥控器,我可以灵活地整合所有需要的功能(如果需要,可能会更多),不需要额外的...

大班必备33首数字歌,轻松学数学

适合大班宝贝的33首数学歌,让孩子们在玩中学,通过好玩、好记的的儿歌来了解数学的知识点,轻松学数学!以上所有有关数学概念的知识点,其中包含了钟表、点数、分解组成、加减、单双数、倒数正数、凑十、方位...

11的寓意和象征

在数字的王国里,每个数字都有其独特的内涵和象征意义。今天,我们将一起探索数字11的奥秘和象征意义。这个奇特的数字,不仅在我们的日常生活中扮演着重要的角色,而且在神秘主义和宗教中也占有的一席之地。首先,...

基于TM1637的数字时钟

方案介绍这个项目是一个原型,我将在我正在进行的其他数字时钟项目中使用。这是我计划在我的下一个数字时钟项目中使用的时间和闹钟设置机制的原型。我希望能给你提供到帮助。如果你想到任何改进,请告诉我。我会更乐...

【金龟子讲睡前故事】数字不见啦

“快做数学题!”妈妈大声吼邦邦。“啊,好烦呀!”邦邦回到屋里,对着数学练习册大声嚷嚷。考拉熊博士在邦邦的屋外听到邦邦的声音,自言自语说:“好像又在发脾气,我得去看看他。”考拉熊博士推门进去,只见邦邦大...

SE 最终幻想 35 周年,《FF7 重制版》破坏剑数字时钟 9 月发售

IT之家3月9日消息,SE今日正式开设了《最终幻想》35周年纪念网站,天野喜孝绘制官方LOGO公布!值得一提的是,索尼PlayStation游戏发布会即将于北京时间3月10...

谁说数字钟就是黑白状?他们让你改变看法

如果我们没有了钟表,你会用什么衡量时间?是利用太阳的变化还是凭猜测?之前设计癖也介绍一些有趣的钟表,像是Edelkrone设计的无表针的Oqloq钟表,也有淡化了表针概念的轨道钟表,今天再给大...

杭州元宵游玩大赏|“人体时钟”亮相文三数字生活街区,还有元宵巡游活动等你嗨

钱江晚报·小时新闻记者方力通讯员冯晨晨刘静滴答滴答,在这个时钟里面有一位虚拟的“小姐姐”。她的工作内容就是不断地把分针擦掉,然后再画上新的分针,她每画一次分针擦干净后,再画上一条新的分针,就刚...

来用PPT做一只数字时钟动画

“什么是可见性?“可见性”即指PPT动画元素中的一种。在我们之前的图文教程《动画基础扫盲课,必修!》中提到过一些常用的PPT动画元素。分别为可见性,X,Y坐标,旋转,高度和宽度。而其中所谓的“可见性”...

4060+4013+74ls161数字电子时钟仿真电路图

苹果手机桌面时钟怎么显示 苹果手机桌面时钟显示操作

苹果手机系统流畅,系统使用起来很舒适,是很多人的首选。苹果时钟可以在桌面上显示数字时钟,如果在编辑主屏幕时,不小心把时钟删掉了,要怎么恢复呢?或者想要设置时钟显示,操作是什么样的呢?苹果手机桌面时钟怎...