HttpClient 4.5.X 实现https请求绕过SSL/TLS连接

HttpClient升级部分类和方法过时,故整理新版处理方式

注:本博文仅为个人技术记录及学习交流

httpclient版本:4.5.11

<dependency>
  <groupId>org.apache.httpcomponents</groupId>
  <artifactId>httpclient</artifactId>
  <version>4.5.11</version>
</dependency>

关键代码如下:

为减少篇幅统一写在一个方法中

public static CloseableHttpClient getSSLClient () {
    CloseableHttpClient client = null;
    try {
      X509TrustManager tm = new X509TrustManager() {
        @Override
        public X509Certificate[] getAcceptedIssuers () {
          return null;
        }

        @Override
        public void checkClientTrusted (X509Certificate[] cert, String oauthType) throws CertificateException {
        }

        @Override
        public void checkServerTrusted (X509Certificate[] cert, String oauthType) throws CertificateException {
        }
      };

      SSLContext ctx = SSLContext.getInstance("TLS");
      ctx.init(null, new TrustManager[]{tm}, null);
      SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory(ctx, NoopHostnameVerifier.INSTANCE);

      // 配置请求参数
      RequestConfig reqConfig = RequestConfig.custom()
          .setCookieSpec(CookieSpecs.STANDARD_STRICT)
          .setExpectContinueEnabled(Boolean.TRUE)
          .setTargetPreferredAuthSchemes(Arrays.asList(AuthSchemes.NTLM, AuthSchemes.DIGEST))
          .setProxyPreferredAuthSchemes(Arrays.asList(AuthSchemes.BASIC))
          .setConnectionRequestTimeout(10000)
          .setConnectTimeout(10000)
          .setSocketTimeout(10000)
          .build();

      // 配置Registry
      Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory>create()
          .register("http", PlainConnectionSocketFactory.INSTANCE)
          .register("https", socketFactory).build();

      // 配置Connection
      PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager(socketFactoryRegistry);
      // 连接池最大连接数
      connectionManager.setMaxTotal(1000);
      // 每个路由最大连接数
      connectionManager.setDefaultMaxPerRoute(20);

      client = HttpClients.custom()
          .setConnectionManager(connectionManager)
          .setDefaultRequestConfig(reqConfig).build();
    } catch (KeyManagementException e) {
      e.printStackTrace();
    } catch (NoSuchAlgorithmException e) {
      e.printStackTrace();
    }
    return client;
  }

鸣谢:

https://blog.csdn.net/zhuzhezhuzhe1/article/details/80508971

https://www.jianshu.com/p/e97143e5615f

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章