標籤:需要 def server eve turn factory 伺服器 back 自己
https網站伺服器都是有認證的。 是由網站自己的伺服器簽發的,並不被瀏覽器或作業系統廣泛接受。
在使用CloseableHttpClient時經常遇到認證錯誤(知乎的網站就是這樣)
現在需要SSL繞過認證,下面直接貼出代碼,調用時只需要在發送請求後 new HttpsBerBer(檔案的位元組碼) ;
1 import javax.net.ssl.HostnameVerifier; 2 import javax.net.ssl.HttpsURLConnection; 3 import javax.net.ssl.SSLSession; 4 import java.util.logging.Logger; 5 6 public class HttpsBerBer { 7 public HttpsBerBer(String name) throws Exception { 8 logger = Logger.getLogger(name); 9 trustAllHttpsCertificates();10 HostnameVerifier hv = new HostnameVerifier() {11 public boolean verify(String urlHostName, SSLSession session) {12 logger.info("Warning: URL Host: " + urlHostName + " vs. " + session.getPeerHost());13 return true;14 }15 };16 HttpsURLConnection.setDefaultHostnameVerifier(hv);17 }18 private static Logger logger ;19 private static void trustAllHttpsCertificates() throws Exception {20 javax.net.ssl.TrustManager[] trustAllCerts = new javax.net.ssl.TrustManager[1];21 javax.net.ssl.TrustManager tm = new miTM();22 trustAllCerts[0] = tm;23 javax.net.ssl.SSLContext sc = javax.net.ssl.SSLContext24 .getInstance("SSL");25 sc.init(null, trustAllCerts, null);26 javax.net.ssl.HttpsURLConnection.setDefaultSSLSocketFactory(sc27 .getSocketFactory());28 }29 static class miTM implements javax.net.ssl.TrustManager,30 javax.net.ssl.X509TrustManager {31 public java.security.cert.X509Certificate[] getAcceptedIssuers() {32 return null;33 }34 35 public boolean isServerTrusted(36 java.security.cert.X509Certificate[] certs) {37 return true;38 }39 40 public boolean isClientTrusted(41 java.security.cert.X509Certificate[] certs) {42 return true;43 }44 45 public void checkServerTrusted(46 java.security.cert.X509Certificate[] certs, String authType)47 throws java.security.cert.CertificateException {48 return;49 }50 51 public void checkClientTrusted(52 java.security.cert.X509Certificate[] certs, String authType)53 throws java.security.cert.CertificateException {54 return;55 }56 }57 }
Java爬蟲--Https繞過認證