网站首页 > 博客文章 正文
需求:
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);
}
}
}
- 上一篇: 怎么写接口文档
- 下一篇: 「原创」某度网盘 无限速下载地址解析
猜你喜欢
- 2025-01-02 在测试接口的时候,还在为token过期郁闷?
- 2025-01-02 小伙给同事爬取数据竟获取不到,竟要使用这种请求方式才能获取?
- 2025-01-02 历史上的今天大事件查询工具推荐 - 历史上的今天 API
- 2025-01-02 面试突击64:了解 HTTP 协议吗?
- 2025-01-02 总结的HTTP比较详细的知识
- 2025-01-02 什么是Http请求走私(Http Request Smugging)及如何发现?
- 2025-01-02 手机号码二要素核验API:提升数据准确性与安全性
- 2025-01-02 真不是吹,Spring 里这款牛逼的网络工具库你可能没用过
- 2025-01-02 详解HTTP协议基本结构
- 2025-01-02 计算机网络-应用层-万维网
你 发表评论:
欢迎- 368℃用AI Agent治理微服务的复杂性问题|QCon
- 364℃手把手教程「JavaWeb」优雅的SpringMvc+Mybatis整合之路
- 358℃初次使用IntelliJ IDEA新建Maven项目
- 351℃Maven技术方案最全手册(mavena)
- 348℃安利Touch Bar 专属应用,让闲置的Touch Bar活跃起来!
- 347℃InfoQ 2024 年趋势报告:架构篇(infoq+2024+年趋势报告:架构篇分析)
- 345℃IntelliJ IDEA 2018版本和2022版本创建 Maven 项目对比
- 343℃从头搭建 IntelliJ IDEA 环境(intellij idea建包)
- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)