|
@@ -18,41 +18,116 @@ package org.apache.dolphinscheduler.common.utils;
|
|
|
|
|
|
import org.apache.dolphinscheduler.common.Constants;
|
|
|
import org.apache.http.HttpEntity;
|
|
|
+import org.apache.http.client.config.AuthSchemes;
|
|
|
+import org.apache.http.client.config.CookieSpecs;
|
|
|
import org.apache.http.client.config.RequestConfig;
|
|
|
import org.apache.http.client.methods.CloseableHttpResponse;
|
|
|
import org.apache.http.client.methods.HttpGet;
|
|
|
+import org.apache.http.config.Registry;
|
|
|
+import org.apache.http.config.RegistryBuilder;
|
|
|
+import org.apache.http.conn.socket.ConnectionSocketFactory;
|
|
|
+import org.apache.http.conn.socket.PlainConnectionSocketFactory;
|
|
|
+import org.apache.http.conn.ssl.NoopHostnameVerifier;
|
|
|
+import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
|
|
|
import org.apache.http.impl.client.CloseableHttpClient;
|
|
|
+import org.apache.http.impl.client.DefaultHttpClient;
|
|
|
import org.apache.http.impl.client.HttpClients;
|
|
|
+import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
|
|
|
import org.apache.http.util.EntityUtils;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
|
|
+import javax.net.ssl.SSLContext;
|
|
|
+import javax.net.ssl.TrustManager;
|
|
|
+import javax.net.ssl.X509TrustManager;
|
|
|
import java.io.IOException;
|
|
|
-
|
|
|
+import java.security.KeyManagementException;
|
|
|
+import java.security.NoSuchAlgorithmException;
|
|
|
+import java.security.cert.X509Certificate;
|
|
|
+import java.util.Arrays;
|
|
|
|
|
|
* http utils
|
|
|
*/
|
|
|
public class HttpUtils {
|
|
|
-
|
|
|
-
|
|
|
+
|
|
|
+
|
|
|
public static final Logger logger = LoggerFactory.getLogger(HttpUtils.class);
|
|
|
|
|
|
+
|
|
|
+ private static CloseableHttpClient httpClient;
|
|
|
+
|
|
|
+ private HttpUtils() {
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ private static PoolingHttpClientConnectionManager cm;
|
|
|
+
|
|
|
+ private static SSLContext ctx = null;
|
|
|
+
|
|
|
+ private static SSLConnectionSocketFactory socketFactory;
|
|
|
+
|
|
|
+ private static RequestConfig requestConfig;
|
|
|
+
|
|
|
+ private static Registry<ConnectionSocketFactory> socketFactoryRegistry;
|
|
|
+
|
|
|
+ private static X509TrustManager xtm = new X509TrustManager() {
|
|
|
+ @Override
|
|
|
+ public void checkClientTrusted(X509Certificate[] chain, String authType) {
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void checkServerTrusted(X509Certificate[] chain, String authType) {
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public X509Certificate[] getAcceptedIssuers() {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ };
|
|
|
+
|
|
|
+ static {
|
|
|
+ try {
|
|
|
+ ctx = SSLContext.getInstance(SSLConnectionSocketFactory.TLS);
|
|
|
+ ctx.init(null, new TrustManager[] { xtm }, null);
|
|
|
+ } catch (NoSuchAlgorithmException e) {
|
|
|
+ logger.error("SSLContext init with NoSuchAlgorithmException", e);
|
|
|
+ } catch (KeyManagementException e) {
|
|
|
+ logger.error("SSLContext init with KeyManagementException", e);
|
|
|
+ }
|
|
|
+ socketFactory = new SSLConnectionSocketFactory(ctx, NoopHostnameVerifier.INSTANCE);
|
|
|
+
|
|
|
+ requestConfig = RequestConfig.custom().setCookieSpec(CookieSpecs.IGNORE_COOKIES)
|
|
|
+ .setExpectContinueEnabled(Boolean.TRUE)
|
|
|
+ .setTargetPreferredAuthSchemes(Arrays.asList(AuthSchemes.NTLM, AuthSchemes.DIGEST))
|
|
|
+ .setProxyPreferredAuthSchemes(Arrays.asList(AuthSchemes.BASIC))
|
|
|
+ .setConnectTimeout(Constants.HTTP_CONNECT_TIMEOUT).setSocketTimeout(Constants.SOCKET_TIMEOUT)
|
|
|
+ .setConnectionRequestTimeout(Constants.HTTP_CONNECTION_REQUEST_TIMEOUT).setRedirectsEnabled(true)
|
|
|
+ .build();
|
|
|
+ socketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory>create()
|
|
|
+ .register("http", PlainConnectionSocketFactory.INSTANCE).register("https", socketFactory).build();
|
|
|
+ cm = new PoolingHttpClientConnectionManager(socketFactoryRegistry);
|
|
|
+ cm.setDefaultMaxPerRoute(60);
|
|
|
+ cm.setMaxTotal(100);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public static synchronized CloseableHttpClient getHttpClient() {
|
|
|
+ if (null == httpClient) {
|
|
|
+ httpClient = HttpClients.custom().setConnectionManager(cm).setDefaultRequestConfig(requestConfig).build();
|
|
|
+ ;
|
|
|
+ }
|
|
|
+ return httpClient;
|
|
|
+ }
|
|
|
|
|
|
* get http request content
|
|
|
* @param url url
|
|
|
* @return http get request response content
|
|
|
*/
|
|
|
public static String get(String url){
|
|
|
- CloseableHttpClient httpclient = HttpClients.createDefault();
|
|
|
+ CloseableHttpClient httpclient = HttpUtils.getHttpClient();
|
|
|
|
|
|
HttpGet httpget = new HttpGet(url);
|
|
|
-
|
|
|
- RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(Constants.HTTP_CONNECT_TIMEOUT)
|
|
|
- .setConnectionRequestTimeout(Constants.HTTP_CONNECTION_REQUEST_TIMEOUT)
|
|
|
- .setSocketTimeout(Constants.SOCKET_TIMEOUT)
|
|
|
- .setRedirectsEnabled(true)
|
|
|
- .build();
|
|
|
- httpget.setConfig(requestConfig);
|
|
|
String responseContent = null;
|
|
|
CloseableHttpResponse response = null;
|
|
|
|
|
@@ -85,12 +160,6 @@ public class HttpUtils {
|
|
|
httpget.releaseConnection();
|
|
|
httpget.abort();
|
|
|
}
|
|
|
-
|
|
|
- try {
|
|
|
- httpclient.close();
|
|
|
- } catch (IOException e) {
|
|
|
- logger.error(e.getMessage(),e);
|
|
|
- }
|
|
|
}
|
|
|
return responseContent;
|
|
|
}
|