1 package com.xing.test;2
3 import java.io.BufferedReader;4 import java.io.IOException;5 import java.io.InputStreamReader;6 import java.io.PrintWriter;7 import java.net.HttpURLConnection;8 import java.net.URL;9
10 import javax.net.ssl.HostnameVerifier;11 import javax.net.ssl.HttpsURLConnection;12 import javax.net.ssl.SSLSession;13
14 import org.apache.log4j.Logger;15
16 public classHttpsTest {17 private String url = "https://kyfw.12306.cn/";18 privateLogger logger;19 publicHttpsTest() {20 logger = Logger.getLogger(HttpsTest.class);21 }22 private static voidtrustAllHttpsCertificates() throws Exception {23 javax.net.ssl.TrustManager[] trustAllCerts = new javax.net.ssl.TrustManager[1];24 javax.net.ssl.TrustManager tm = newmiTM();25 trustAllCerts[0] =tm;26 javax.net.ssl.SSLContext sc = javax.net.ssl.SSLContext.getInstance("SSL","SunJSSE");27 sc.init(null, trustAllCerts, null);28 javax.net.ssl.HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());29 }30
31 publicString getData() {32 PrintWriter out = null;33 BufferedReader in = null;34 HttpURLConnection conn = null;35 String result = "";36 try{37 //该部分必须在获取connection前调用
38 trustAllHttpsCertificates();39 HostnameVerifier hv = newHostnameVerifier() {40 @Override41 publicboolean verify(String urlHostName, SSLSession session) {42 logger.info("Warning: URL Host:" + urlHostName + "vs." +session.getPeerHost());43 return true;44 }45 };46 HttpsURLConnection.setDefaultHostnameVerifier(hv);47 conn = (HttpURLConnection)newURL(url).openConnection();48 //发送GET请求必须设置如下两行
49 conn.setDoInput(true);50 conn.setRequestMethod("GET");51 // //发送POST请求必须设置如下两行52 //conn.setDoOutput(true);53 //conn.setDoInput(true);54 //
55 // //获取URLConnection对象对应的输出流56 //out = new PrintWriter(conn.getOutputStream());57 // //发送请求参数
58 out.print(params);
59 // //flush输出流的缓冲60 //out.flush();61
62 //flush输出流的缓冲
63 in = new BufferedReader(newInputStreamReader(conn.getInputStream()));64 String line;65 while ((line = in.readLine()) != null) {66 result +=line;67 }68 } catch(Exception e) {69 logger.error("发送 GET 请求出现异常!\t请求ID:"+"\n"+e.getMessage()+"\n");70 e.printStackTrace();71 } finally {//使用finally块来关闭输出流、输入流
72 try{73 if (in != null) {74 in.close();75 }76 } catch(IOException ex) {77 logger.error("关闭数据流出错了!\n"+ex.getMessage()+"\n");78 ex.printStackTrace();79 }80 }81 //获得相应结果result,可以直接处理......
82 returnresult;83
84 }85 static classmiTM implements javax.net.ssl.TrustManager, javax.net.ssl.X509TrustManager {86 publicjava.security.cert.X509Certificate[] getAcceptedIssuers() {87 return null;88 }89
90 publicboolean isServerTrusted(java.security.cert.X509Certificate[] certs) {91 return true;92 }93
94 publicboolean isClientTrusted(java.security.cert.X509Certificate[] certs) {95 return true;96 }97
98 public voidcheckServerTrusted(java.security.cert.X509Certificate[] certs, String authType)99 throws java.security.cert.CertificateException {100 return;101 }102
103 public voidcheckClientTrusted(java.security.cert.X509Certificate[] certs, String authType)104 throws java.security.cert.CertificateException {105 return;106 }107 }108 }
在连接之前调用