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

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