• Java爬虫--Https绕过证书


      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.SSLContext
    24                 .getInstance("SSL");
    25         sc.init(null, trustAllCerts, null);
    26         javax.net.ssl.HttpsURLConnection.setDefaultSSLSocketFactory(sc
    27                 .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 }

      

         

  • 相关阅读:
    04:求整数的和与均值
    03:均值
    02:财务管理
    C8-3 三角形还是长方形? (100/100 分数)
    C8-2 圆的周长和面积 (100/100 分数)
    C8-1 复数加减乘除 (100/100 分数)
    C7-3 用类实现a+b (100/100 分数)
    C7-2 多继承 (100/100 分数)
    C7-1 账户类(100/100)
    数组第k小数
  • 原文地址:https://www.cnblogs.com/LexMoon/p/JavaBerBer.html
Copyright © 2020-2023  润新知