实现X509证书信任管理器类(避免导证书)

package com.showlin.httpsDemo;import javax.net.ssl.X509TrustManager;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;/*** @Author:xielin* @Description: 实现X509证书信任管理器类(避免导证书)* @Date:2022/3/29 9:29* @Version: 1.0*/
public class MyX509TrustManager implements X509TrustManager {@Overridepublic void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {}@Overridepublic void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {}@Overridepublic X509Certificate[] getAcceptedIssuers() {return null;}
}

HttpRequest 和 测试

package com.showlin.httpsDemo;import javax.net.ssl.*;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;/*** @Author:xielin* @Description:* @Date:2022/3/29 9:31* @Version: 1.0*/
public class HttpRequest {// JAVA实现HTTPS接口(POST方式)https://blog.csdn.net/s13554341560b/article/details/78872902// java 网络请求 支持https 记录cookie并带入请求https://blog.csdn.net/s13488941815/article/details/87186075public static String allcookie;public static String firstCookie;/*** 向指定 URL 发送POST方法的请求 http或https** @param url   发送请求的 URL* @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。* @return 所代表远程资源的响应结果*/public static String sendPost(String url, String param) {// System.setProperty("java.protocol.handler.pkgs", "com.sun.net.ssl.internal.www.protocol");// java.security.Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());PrintWriter out = null;BufferedReader in = null;String result = "";try {URL realUrl = new URL(url);if (url.startsWith("https")) {// 创建SSLContext对象,并使用我们指定的信任管理器初始化TrustManager[] tm = {new MyX509TrustManager()};SSLContext sslContext = SSLContext.getInstance("SSL");sslContext.init(null, tm, new java.security.SecureRandom());// 从上述SSLContext对象中得到SSLSocketFactory对象SSLSocketFactory ssf = sslContext.getSocketFactory();HostnameVerifier hv = new HostnameVerifier() {@Overridepublic boolean verify(String urlHostName, SSLSession session) {return true;}};HttpsURLConnection.setDefaultHostnameVerifier(hv);// Https 请求HttpsURLConnection conn = (HttpsURLConnection) realUrl.openConnection();conn.setSSLSocketFactory(ssf);result = handleSend(conn, out, in, param);} else {// http 请求HttpURLConnection conn = (HttpURLConnection) realUrl.openConnection();result = handleSend(conn, out, in, param);}// System.out.println("-----result-----" + result);} catch (Exception e) {System.out.println("发送 POST 请求出现异常!" + e);e.printStackTrace();}//使用finally块来关闭输出流、输入流finally {try {if (out != null) {out.close();}if (in != null) {in.close();}} catch (IOException ex) {ex.printStackTrace();}}return result;}private static String handleSend(URLConnection conn, PrintWriter out, BufferedReader in, String param) throws IOException {String result = "";// 设置通用的请求属性conn.setRequestProperty("accept", "*/*");// todo// conn.addRequestProperty("Cookie", allcookie);// conn.setRequestProperty("Authorization", "");conn.setRequestProperty("connection", "Keep-Alive");conn.setRequestProperty("content-Type", "application/json");conn.setRequestProperty("user-agent","Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");// 发送POST请求必须设置如下两行conn.setDoOutput(true);conn.setDoInput(true);// 获取URLConnection对象对应的输出流out = new PrintWriter(conn.getOutputStream());// 发送请求参数out.print(param);// flush输出流的缓冲out.flush();// 保存cookie 根据实际需要是否登录后保存cookieMap<String, List<String>> map=conn.getHeaderFields();Set<String> set=map.keySet();for (Iterator iterator = set.iterator(); iterator.hasNext();) {String key = (String) iterator.next();if (key!=null&&key.equals("Set-Cookie")) {System.out.println("key=" + key+",开始获取cookie");List<String> list = map.get(key);StringBuilder builder = new StringBuilder();for (String str : list) {builder.append(str).toString();}firstCookie=builder.toString();allcookie+=firstCookie+";";System.out.println("第一次得到的cookie="+firstCookie);}}// 定义BufferedReader输入流来读取URL的响应in = new BufferedReader(new InputStreamReader(conn.getInputStream()));String line;while ((line = in.readLine()) != null) {result += line;}return result;}public static void main(String[] args) throws Exception {// String url = "http://***.com/dataService/manage/people/idinfo";// Map<String, Object> param = new HashMap<String, Object>();// param.put("idNo", "362424195501171123");// String message = new JSONObject(param).toJSONString(4);// System.out.println(message);// System.out.println(HttpRequest.sendPost(url, message));String url = "https://ip:20001/apiv1/authority/login";String message = "{\"lang\":\"zh-CN\",\"tz\":\"+8:00\",\"platform\":\"web\",\"agent\":\"ZK\",\"intfVer\":\"1.0.0\",\"sys\":\"magic-cube\",\"sessionId\":null,\"payload\":{\"params\":{\"username\":\"Admin\",\"password\":\"21232f297a57a5a\"}}}";System.out.println(HttpRequest.sendPost(url, message));}
}

请求https,X509证书信任管理器类,避免导证书相关推荐

  1. DriverManager 驱动管理器类简介 JDBC简介(三)

    驱动程序管理器是负责管理驱动程序的,驱动注册以后,会保存在DriverManager中的已注册列表中 后续的处理就可以对这个列表进行操作 简言之,驱动管理器,就是字面含义,主要负责就是管理 驱动 概述 ...

  2. Django:admin管理后台2,ModelAdmin模型管理器类

    https://docs.djangoproject.com/zh-hans/3.2/ref/contrib/admin/ admin.py from django.contrib import ad ...

  3. Django中--自定义模型管理器类

    BookInfo.objects.all()->objects是一个什么东西呢? 答:objects是models.Manger类的一个对象,是Django帮我自动生成的管理器对象,通过这个管理 ...

  4. pythonrequests请求https错误_如何解决python之requests安全证书(HTTPS请求)问题?

    用requests包请求https的网站时,我们偶尔会遇到证书问题.也就是常见的SSLerror,遇到这种问题莫慌莫慌. 这里没有找到合适的网站去报SSL证书的错误,所以就假装请求了一个https的网 ...

  5. 【Django入门】——模型管理器对象、模型管理器类和模型类

    文章目录 一.模型管理器对象 1. 自定义模型管理器对象 2. 自定义模型管理器类 3. 自定义模型管理器类应用 3.1 重写框架的方法 3.2 封装自定义方法 4. 模型管理器对象的`model`属 ...

  6. Python Django,模型,模型管理器类(models.Manager)(与数据库交互的接口),自定义模型管理器类

    模型类.objects.all() ---> objects是Django自动生成的管理器对象,通过这个管理器对象可以实现与数据库的交互. 定义模型类时可以为模型类指定自定义的管理类对象,指定后 ...

  7. cocos植物大战僵尸(五)选择植物卡片:待选择植物卡片管理器类

    2.4.2 待选择植物卡片管理器类 此类管理所有本关卡能选择的卡片. //从关卡配置文件中读取坐标,卡片名并显示出来 bool CWaitChooseCardMgr::levelConfigLoad( ...

  8. Django中数据对象的增删改查常用方法,自定义管理器类,过滤器及F和Q对象等知识点总结

    Django对象的增删改查 我们为了对django对象的增删改查进行总结,先在model.py文件中创建类便于举例 定义学生: class Students(models.Model):sname=m ...

  9. resttemplate 设置请求头_Jmeter信息头管理器常用的三种传参格式

    当我们在利用Jmeter进行接口测试时,其实相当于Jmeter模拟浏览器作为客户端,按照HTTP等协议发送报文给服务器端接口,以HTTP为例,他的请求报文包括请求行.请求头和请求体,今天要说的三种co ...

最新文章

  1. 如何查看当前Linux的版本
  2. VC中的TRACE宏:
  3. PyQt5 图形界面-实现按钮监听事件
  4. 卓金武——从数学建模到MATLAB
  5. 两个系统交互方式有几种_创新性OriginOS系统,打造个性化交互方式,很给力
  6. 计算机二级 java和web_2016计算机二级web程序设计判断题及答案
  7. STL标准模版库----queue/deque操作大全
  8. 解决Windows10 14393版本迅雷崩溃问题
  9. 西雅图亚马逊1个月入职日记,传闻中的“血汗工厂”真实存在吗?
  10. 程序员加油站 -- 不是人人都懂的学习要点
  11. Win10禁用缩略图解决资源管理器老是重启
  12. php 786.00,美國佛羅裡達州區號786
  13. 全智通A+常见问题汇总解答—A+修正维修详情页面打印派工清单和领料清单按钮无效
  14. 2018亚洲区域赛焦作站参赛总结
  15. 【收藏】亲测奥维互动地图如何导入2023谷歌地图
  16. 实训十四:路由器策略路由(PBR)配置
  17. 从这里,开始屌丝的逆袭
  18. Navicat 使用IP连接本地mysql服务提示无权限访问
  19. Java基础篇——面向对象编程
  20. 高一英语计算机课文,高一英语课本

热门文章

  1. Postfix中如何删除邮件队列[mailq]中的邮件
  2. uniapp 自定义导航栏
  3. 邮箱怎样设置服务器端口ssl,如何设置IMAP、POP3/SMTP及其SSL加密方式?
  4. 【PySimpleGUI】Python用户交互图形界面开发(1)
  5. Python变量的定义和使用
  6. 养成6个习惯 预防并克服拖拉
  7. oracle 中横线转义符,oracle 转义字符去掉下划线 _ 的使用方法
  8. Execution default-resources of goal org.apache.maven.plugins:maven-resources-plugin
  9. php 腾讯地图 地址逆解析 根据经纬度获取地址信息
  10. 坚持不只是坚持本身还在守住底线