Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 285|回复: 0

[默认分类] Java 发送https 的post请求方法

[复制链接]
  • TA的每日心情
    开心
    2021-12-13 21:45
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    发表于 2018-6-30 10:12:08 | 显示全部楼层 |阅读模式


      
       import java.io.BufferedReader;  
       import java.io.FileInputStream;  
       import java.io.IOException;  
       import java.io.InputStreamReader;  
       import java.net.MalformedURLException;  
       import java.net.URL;  
       import java.security.GeneralSecurityException;  
       import java.security.KeyStore;  
         
       import javax.net.ssl.HostnameVerifier;  
       import javax.net.ssl.HttpsURLConnection;  
       import javax.net.ssl.KeyManagerFactory;  
       import javax.net.ssl.SSLContext;  
       import javax.net.ssl.TrustManagerFactory;  
         
       public class HttpsPost {  
           /**
            * 获得KeyStore.
            * @param keyStorePath
            *            密钥库路径
            * @param password
            *            密码
            * @return 密钥库
            * @throws Exception
            */  
           public static KeyStore getKeyStore(String password, String keyStorePath)  
                   throws Exception {  
               // 实例化密钥库  
               KeyStore ks = KeyStore.getInstance("JKS");  
               // 获得密钥库文件流  
               FileInputStream is = new FileInputStream(keyStorePath);  
               // 加载密钥库  
               ks.load(is, password.toCharArray());  
               // 关闭密钥库文件流  
               is.close();  
               return ks;  
           }  
         
           /**
            * 获得SSLSocketFactory.
            * @param password
            *            密码
            * @param keyStorePath
            *            密钥库路径
            * @param trustStorePath
            *            信任库路径
            * @return SSLSocketFactory
            * @throws Exception
            */  
           public static SSLContext getSSLContext(String password,  
                   String keyStorePath, String trustStorePath) throws Exception {  
               // 实例化密钥库  
               KeyManagerFactory keyManagerFactory = KeyManagerFactory  
                       .getInstance(KeyManagerFactory.getDefaultAlgorithm());  
               // 获得密钥库  
               KeyStore keyStore = getKeyStore(password, keyStorePath);  
               // 初始化密钥工厂  
               keyManagerFactory.init(keyStore, password.toCharArray());  
         
               // 实例化信任库  
               TrustManagerFactory trustManagerFactory = TrustManagerFactory  
                       .getInstance(TrustManagerFactory.getDefaultAlgorithm());  
               // 获得信任库  
               KeyStore trustStore = getKeyStore(password, trustStorePath);  
               // 初始化信任库  
               trustManagerFactory.init(trustStore);  
               // 实例化SSL上下文  
               SSLContext ctx = SSLContext.getInstance("TLS");  
               // 初始化SSL上下文  
               ctx.init(keyManagerFactory.getKeyManagers(),  
                       trustManagerFactory.getTrustManagers(), null);  
               // 获得SSLSocketFactory  
               return ctx;  
           }  
         
           /**
            * 初始化HttpsURLConnection.
            * @param password
            *            密码
            * @param keyStorePath
            *            密钥库路径
            * @param trustStorePath
            *            信任库路径
            * @throws Exception
            */  
           public static void initHttpsURLConnection(String password,  
                   String keyStorePath, String trustStorePath) throws Exception {  
               // 声明SSL上下文  
               SSLContext sslContext = null;  
               // 实例化主机名验证接口  
               HostnameVerifier hnv = new MyHostnameVerifier();  
               try {  
                   sslContext = getSSLContext(password, keyStorePath, trustStorePath);  
               } catch (GeneralSecurityException e) {  
                   e.printStackTrace();  
               }  
               if (sslContext != null) {  
                   HttpsURLConnection.setDefaultSSLSocketFactory(sslContext  
                           .getSocketFactory());  
               }  
               HttpsURLConnection.setDefaultHostnameVerifier(hnv);  
           }  
         
           /**
            * 发送请求.
            * @param httpsUrl
            *            请求的地址
            * @param xmlStr
            *            请求的数据
            */  
           public static void post(String httpsUrl, String xmlStr) {  
               HttpsURLConnection urlCon = null;  
               try {  
                   urlCon = (HttpsURLConnection) (new URL(httpsUrl)).openConnection();  
                   urlCon.setDoInput(true);  
                   urlCon.setDoOutput(true);  
                   urlCon.setRequestMethod("POST");  
                   urlCon.setRequestProperty("Content-Length",  
                           String.valueOf(xmlStr.getBytes().length));  
                   urlCon.setUseCaches(false);  
                   //设置为gbk可以解决服务器接收时读取的数据中文乱码问题  
                   urlCon.getOutputStream().write(xmlStr.getBytes("gbk"));  
                   urlCon.getOutputStream().flush();  
                   urlCon.getOutputStream().close();  
                   BufferedReader in = new BufferedReader(new InputStreamReader(  
                           urlCon.getInputStream()));  
                   String line;  
                   while ((line = in.readLine()) != null) {  
                       System.out.println(line);  
                   }  
               } catch (MalformedURLException e) {  
                   e.printStackTrace();  
               } catch (IOException e) {  
                   e.printStackTrace();  
               } catch (Exception e) {  
                   e.printStackTrace();  
               }  
           }  
         
           /**
            * 测试方法.
            * @param args
            * @throws Exception
            */  
           public static void main(String[] args) throws Exception {  
               // 密码  
               String password = "123456";  
               // 密钥库  
               String keyStorePath = "tomcat.keystore";  
               // 信任库  
               String trustStorePath = "tomcat.keystore";  
               // 本地起的https服务  
               String httpsUrl = "https://localhost:8443/service/httpsPost";  
               // 传输文本  
               String xmlStr = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><fruitShop><fruits><fruit><kind>萝卜</kind></fruit><fruit><kind>菠萝</kind></fruit></fruits></fruitShop>";  
               HttpsPost.initHttpsURLConnection(password, keyStorePath, trustStorePath);  
               // 发起请求  
               HttpsPost.post(httpsUrl, xmlStr);  
           }  
       }  
      




      
       
        [java]
        view plain
        copy
       
       
      
      
       import javax.net.ssl.HostnameVerifier;  
       import javax.net.ssl.SSLSession;  
         
       /**
        * 实现用于主机名验证的基接口。  
        * 在握手期间,如果 URL 的主机名和服务器的标识主机名不匹配,则验证机制可以回调此接口的实现程序来确定是否应该允许此连接。
        */  
       public class MyHostnameVerifier implements HostnameVerifier {  
           @Override  
           public boolean verify(String hostname, SSLSession session) {  
               if("localhost".equals(hostname)){  
                   return true;  
               } else {  
                   return false;  
               }  
           }  
       }  
      



    接收请求的Web应用:
    web.xml


      
       
        [HTML]
        view plain
        copy
       
       
      
      
       <?xml version="1.0" encoding="UTF-8"?>  
       <web-app version="2.5"   
           xmlns="http://java.sun.com/xml/ns/javaEE"   
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
           xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   
           http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  
         <Servlet>  
           <servlet-name>rollBack</servlet-name>  
           <servlet-class>rollBack</servlet-class>  
         </servlet>  
         
         <servlet-mapping>  
           <servlet-name>rollBack</servlet-name>  
           <url-pattern>/httpsPost</url-pattern>  
         </servlet-mapping>  
         <welcome-file-list>  
           <welcome-file>index.jsp</welcome-file>  
         </welcome-file-list>  
       </web-app>  
      



    rollBack servlet



      
       
        [java]
        view plain
        copy
       
       
      
      
       import java.io.BufferedReader;  
       import java.io.IOException;  
       import java.io.InputStreamReader;  
         
       import javax.servlet.ServletException;  
       import javax.servlet.ServletInputStream;  
       import javax.servlet.http.HttpServlet;  
       import javax.servlet.http.HttpServletRequest;  
       import javax.servlet.http.HttpServletResponse;  
         
         
       public class rollBack extends HttpServlet {  
         
           public void doGet(HttpServletRequest request, HttpServletResponse response)  
                   throws ServletException, IOException {  
               //获取请求流  
               ServletInputStream sis = request.getInputStream();  
               BufferedReader in = new BufferedReader(new InputStreamReader(sis));  
               String line;  
               if((line = in.readLine()) != null){  
                   System.out.println(line);  
               }  
               in.close();  
           }  
         
           public void doPost(HttpServletRequest request, HttpServletResponse response)  
                   throws ServletException, IOException {  
               this.doGet(request, response);  
           }  
       }  
      
      
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2025-2-24 07:14 , Processed in 0.442372 second(s), 48 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表