• 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 }

      

         

  • 相关阅读:
    Unrecognized attribute 'targetFramework'.错误解决
    [译]Razor内幕之模板
    [译]Razor内幕之解析
    Java下载中文乱码问题解决方法
    获取矩形中心点与矩形外某点连线和矩形交点的算法
    做产品开发的感想
    [译]Razor内幕之表达式
    Could not find the main class. Program will exit.
    基于SAML的单点登录.NET代理端实现方案
    Linux内核虚拟内存的管理结构说明
  • 原文地址:https://www.cnblogs.com/LexMoon/p/JavaBerBer.html
Copyright © 2020-2023  润新知