一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

Java 發(fā)送https 的post請求方法

 青_春 2017-01-12


  1. import java.io.BufferedReader;  
  2. import java.io.FileInputStream;  
  3. import java.io.IOException;  
  4. import java.io.InputStreamReader;  
  5. import java.net.MalformedURLException;  
  6. import java.net.URL;  
  7. import java.security.GeneralSecurityException;  
  8. import java.security.KeyStore;  
  9.   
  10. import javax.net.ssl.HostnameVerifier;  
  11. import javax.net.ssl.HttpsURLConnection;  
  12. import javax.net.ssl.KeyManagerFactory;  
  13. import javax.net.ssl.SSLContext;  
  14. import javax.net.ssl.TrustManagerFactory;  
  15.   
  16. public class HttpsPost {  
  17.     /** 
  18.      * 獲得KeyStore. 
  19.      * @param keyStorePath 
  20.      *            密鑰庫路徑 
  21.      * @param password 
  22.      *            密碼 
  23.      * @return 密鑰庫 
  24.      * @throws Exception 
  25.      */  
  26.     public static KeyStore getKeyStore(String password, String keyStorePath)  
  27.             throws Exception {  
  28.         // 實例化密鑰庫  
  29.         KeyStore ks = KeyStore.getInstance("JKS");  
  30.         // 獲得密鑰庫文件流  
  31.         FileInputStream is = new FileInputStream(keyStorePath);  
  32.         // 加載密鑰庫  
  33.         ks.load(is, password.toCharArray());  
  34.         // 關(guān)閉密鑰庫文件流  
  35.         is.close();  
  36.         return ks;  
  37.     }  
  38.   
  39.     /** 
  40.      * 獲得SSLSocketFactory. 
  41.      * @param password 
  42.      *            密碼 
  43.      * @param keyStorePath 
  44.      *            密鑰庫路徑 
  45.      * @param trustStorePath 
  46.      *            信任庫路徑 
  47.      * @return SSLSocketFactory 
  48.      * @throws Exception 
  49.      */  
  50.     public static SSLContext getSSLContext(String password,  
  51.             String keyStorePath, String trustStorePath) throws Exception {  
  52.         // 實例化密鑰庫  
  53.         KeyManagerFactory keyManagerFactory = KeyManagerFactory  
  54.                 .getInstance(KeyManagerFactory.getDefaultAlgorithm());  
  55.         // 獲得密鑰庫  
  56.         KeyStore keyStore = getKeyStore(password, keyStorePath);  
  57.         // 初始化密鑰工廠  
  58.         keyManagerFactory.init(keyStore, password.toCharArray());  
  59.   
  60.         // 實例化信任庫  
  61.         TrustManagerFactory trustManagerFactory = TrustManagerFactory  
  62.                 .getInstance(TrustManagerFactory.getDefaultAlgorithm());  
  63.         // 獲得信任庫  
  64.         KeyStore trustStore = getKeyStore(password, trustStorePath);  
  65.         // 初始化信任庫  
  66.         trustManagerFactory.init(trustStore);  
  67.         // 實例化SSL上下文  
  68.         SSLContext ctx = SSLContext.getInstance("TLS");  
  69.         // 初始化SSL上下文  
  70.         ctx.init(keyManagerFactory.getKeyManagers(),  
  71.                 trustManagerFactory.getTrustManagers(), null);  
  72.         // 獲得SSLSocketFactory  
  73.         return ctx;  
  74.     }  
  75.   
  76.     /** 
  77.      * 初始化HttpsURLConnection. 
  78.      * @param password 
  79.      *            密碼 
  80.      * @param keyStorePath 
  81.      *            密鑰庫路徑 
  82.      * @param trustStorePath 
  83.      *            信任庫路徑 
  84.      * @throws Exception 
  85.      */  
  86.     public static void initHttpsURLConnection(String password,  
  87.             String keyStorePath, String trustStorePath) throws Exception {  
  88.         // 聲明SSL上下文  
  89.         SSLContext sslContext = null;  
  90.         // 實例化主機名驗證接口  
  91.         HostnameVerifier hnv = new MyHostnameVerifier();  
  92.         try {  
  93.             sslContext = getSSLContext(password, keyStorePath, trustStorePath);  
  94.         } catch (GeneralSecurityException e) {  
  95.             e.printStackTrace();  
  96.         }  
  97.         if (sslContext != null) {  
  98.             HttpsURLConnection.setDefaultSSLSocketFactory(sslContext  
  99.                     .getSocketFactory());  
  100.         }  
  101.         HttpsURLConnection.setDefaultHostnameVerifier(hnv);  
  102.     }  
  103.   
  104.     /** 
  105.      * 發(fā)送請求. 
  106.      * @param httpsUrl 
  107.      *            請求的地址 
  108.      * @param xmlStr 
  109.      *            請求的數(shù)據(jù) 
  110.      */  
  111.     public static void post(String httpsUrl, String xmlStr) {  
  112.         HttpsURLConnection urlCon = null;  
  113.         try {  
  114.             urlCon = (HttpsURLConnection) (new URL(httpsUrl)).openConnection();  
  115.             urlCon.setDoInput(true);  
  116.             urlCon.setDoOutput(true);  
  117.             urlCon.setRequestMethod("POST");  
  118.             urlCon.setRequestProperty("Content-Length",  
  119.                     String.valueOf(xmlStr.getBytes().length));  
  120.             urlCon.setUseCaches(false);  
  121.             //設(shè)置為gbk可以解決服務器接收時讀取的數(shù)據(jù)中文亂碼問題  
  122.             urlCon.getOutputStream().write(xmlStr.getBytes("gbk"));  
  123.             urlCon.getOutputStream().flush();  
  124.             urlCon.getOutputStream().close();  
  125.             BufferedReader in = new BufferedReader(new InputStreamReader(  
  126.                     urlCon.getInputStream()));  
  127.             String line;  
  128.             while ((line = in.readLine()) != null) {  
  129.                 System.out.println(line);  
  130.             }  
  131.         } catch (MalformedURLException e) {  
  132.             e.printStackTrace();  
  133.         } catch (IOException e) {  
  134.             e.printStackTrace();  
  135.         } catch (Exception e) {  
  136.             e.printStackTrace();  
  137.         }  
  138.     }  
  139.   
  140.     /** 
  141.      * 測試方法. 
  142.      * @param args 
  143.      * @throws Exception 
  144.      */  
  145.     public static void main(String[] args) throws Exception {  
  146.         // 密碼  
  147.         String password = "123456";  
  148.         // 密鑰庫  
  149.         String keyStorePath = "tomcat.keystore";  
  150.         // 信任庫  
  151.         String trustStorePath = "tomcat.keystore";  
  152.         // 本地起的https服務  
  153.         String httpsUrl = "https://localhost:8443/service/httpsPost";  
  154.         // 傳輸文本  
  155.         String xmlStr = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><fruitShop><fruits><fruit><kind>蘿卜</kind></fruit><fruit><kind>菠蘿</kind></fruit></fruits></fruitShop>";  
  156.         HttpsPost.initHttpsURLConnection(password, keyStorePath, trustStorePath);  
  157.         // 發(fā)起請求  
  158.         HttpsPost.post(httpsUrl, xmlStr);  
  159.     }  
  160. }  

[java] view plaincopy
  1. import javax.net.ssl.HostnameVerifier;  
  2. import javax.net.ssl.SSLSession;  
  3.   
  4. /** 
  5.  * 實現(xiàn)用于主機名驗證的基接口。  
  6.  * 在握手期間,如果 URL 的主機名和服務器的標識主機名不匹配,則驗證機制可以回調(diào)此接口的實現(xiàn)程序來確定是否應該允許此連接。 
  7.  */  
  8. public class MyHostnameVerifier implements HostnameVerifier {  
  9.     @Override  
  10.     public boolean verify(String hostname, SSLSession session) {  
  11.         if("localhost".equals(hostname)){  
  12.             return true;  
  13.         } else {  
  14.             return false;  
  15.         }  
  16.     }  
  17. }  

接收請求的Web應用:

web.xml

[html] view plaincopy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <web-app version="2.5"   
  3.     xmlns="http://java./xml/ns/javaee"   
  4.     xmlns:xsi="http://www./2001/XMLSchema-instance"   
  5.     xsi:schemaLocation="http://java./xml/ns/javaee   
  6.     http://java./xml/ns/javaee/web-app_2_5.xsd">  
  7.   <servlet>  
  8.     <servlet-name>rollBack</servlet-name>  
  9.     <servlet-class>rollBack</servlet-class>  
  10.   </servlet>  
  11.   
  12.   <servlet-mapping>  
  13.     <servlet-name>rollBack</servlet-name>  
  14.     <url-pattern>/httpsPost</url-pattern>  
  15.   </servlet-mapping>  
  16.   <welcome-file-list>  
  17.     <welcome-file>index.jsp</welcome-file>  
  18.   </welcome-file-list>  
  19. </web-app>  

rollBack servlet

[java] view plaincopy
  1. import java.io.BufferedReader;  
  2. import java.io.IOException;  
  3. import java.io.InputStreamReader;  
  4.   
  5. import javax.servlet.ServletException;  
  6. import javax.servlet.ServletInputStream;  
  7. import javax.servlet.http.HttpServlet;  
  8. import javax.servlet.http.HttpServletRequest;  
  9. import javax.servlet.http.HttpServletResponse;  
  10.   
  11.   
  12. public class rollBack extends HttpServlet {  
  13.   
  14.     public void doGet(HttpServletRequest request, HttpServletResponse response)  
  15.             throws ServletException, IOException {  
  16.         //獲取請求流  
  17.         ServletInputStream sis = request.getInputStream();  
  18.         BufferedReader in = new BufferedReader(new InputStreamReader(sis));  
  19.         String line;  
  20.         if((line = in.readLine()) != null){  
  21.             System.out.println(line);  
  22.         }  
  23.         in.close();  
  24.     }  
  25.   
  26.     public void doPost(HttpServletRequest request, HttpServletResponse response)  
  27.             throws ServletException, IOException {  
  28.         this.doGet(request, response);  
  29.     }  
  30. }  

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    亚洲中文在线男人的天堂| 九九热精品视频免费观看| 最近最新中文字幕免费| 国产av一区二区三区久久不卡| 国产不卡一区二区四区| 国产欧美一区二区久久| 国内精品偷拍视频久久| 99久久人妻精品免费一区| 色哟哟精品一区二区三区| 国产一级内片内射免费看 | 99久久国产精品成人观看| 久久精品中文扫妇内射| 在线观看国产午夜福利| 亚洲国产av在线视频| 欧美日韩免费观看视频| 国产精品久久久久久久久久久痴汉| 99热九九在线中文字幕| 五月婷婷缴情七月丁香 | 日韩一区二区三区免费av| 男人的天堂的视频东京热| 亚洲综合伊人五月天中文| 国产一区一一一区麻豆| 成人精品一区二区三区在线| 午夜精品一区二区av| 成人精品欧美一级乱黄| 最近最新中文字幕免费| 国产午夜在线精品视频| 国产精品白丝一区二区| 亚洲综合一区二区三区在线| 欧美乱码精品一区二区三| 美女被草的视频在线观看| 色丁香之五月婷婷开心| 国产日韩熟女中文字幕| 人妻一区二区三区多毛女| 国产内射一级一片内射高清视频 | 视频一区二区 国产精品| 日本99精品在线观看| 国产精品免费视频久久| 草草视频福利在线观看| 不卡免费成人日韩精品| 男人把女人操得嗷嗷叫|