Parcourir la source

1、新增httputils类,用于九恒星调用接口返回乱码问题,

wanghaiwu il y a 3 semaines
Parent
commit
f8f89d251d

+ 180 - 0
code/jyyy/nckd-jimin-jyyy-fi/src/main/java/fi/cas/opplugin/HttpUtils.java

@@ -0,0 +1,180 @@
+package fi.cas.opplugin;
+
+import com.alibaba.fastjson.JSONObject;
+import org.apache.http.Header;
+import org.apache.http.HttpEntity;
+import org.apache.http.HttpResponse;
+import org.apache.http.client.HttpClient;
+import org.apache.http.client.config.RequestConfig;
+import org.apache.http.client.entity.GzipDecompressingEntity;
+import org.apache.http.client.methods.HttpPost;
+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.entity.ContentType;
+import org.apache.http.entity.StringEntity;
+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.params.HttpConnectionParams;
+import org.apache.http.params.HttpParams;
+import org.apache.http.util.EntityUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.net.ssl.KeyManager;
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.TrustManager;
+import javax.net.ssl.X509TrustManager;
+import javax.security.cert.CertificateException;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.URI;
+import java.security.SecureRandom;
+import java.security.cert.X509Certificate;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.Map;
+
+public class HttpUtils {
+    private static Logger logger = LoggerFactory.getLogger(HttpUtils.class);
+    private static int default_connectionTimeout = Integer.getInteger("httpclient.connectionTimeout", 3000);
+    private static int default_readTimeout = Integer.getInteger("httpclient.readTimeout", 5000);
+    private static String SCHEME_HTTPS = "https";
+
+    public static String postjson(String url, Map<String, String> header, String json) throws IOException {
+        return postjson(url, header, json, default_connectionTimeout, default_readTimeout);
+    }
+
+
+
+    public static String postjson(String url, Map<String, String> header, String json, int connectionTimeout, int readTimeout) throws IOException {
+        String CONTENT_TYPE_TEXT_JSON = "text/json;";
+        String data = "";
+        HttpClient client = null;
+        HttpPost post = new HttpPost(url);
+        URI uri = post.getURI();
+        if (SCHEME_HTTPS.equals(uri.getScheme())) {
+            client = wrapperHttpClient(connectionTimeout, readTimeout);
+            if (client == null) {
+                return data;
+            }
+        } else {
+            client = createHttpClient(connectionTimeout, readTimeout);
+            HttpParams httpParams = client.getParams();
+            HttpConnectionParams.setConnectionTimeout(httpParams, connectionTimeout);
+            HttpConnectionParams.setSoTimeout(httpParams, readTimeout);
+        }
+
+        try {
+            if (header != null && header.size() != 0) {
+                Iterator<String> iterator = header.keySet().iterator();
+
+                while(iterator.hasNext()) {
+                    String key = (String)iterator.next();
+                    post.setHeader(key, (String)header.get(key));
+                }
+            }
+
+            StringEntity se = new StringEntity(json, ContentType.APPLICATION_JSON);
+            se.setContentType("text/json;");
+            post.setEntity(se);
+            HttpResponse response = client.execute(post);
+            if (response.getStatusLine().getStatusCode() == 200) {
+                HttpEntity resEntity = response.getEntity();
+                Header respHeader = resEntity.getContentEncoding();
+                if (respHeader == null || !"gzip".equalsIgnoreCase(respHeader.getValue()) && !"x-gzip".equalsIgnoreCase(respHeader.getValue())) {
+                    data = EntityUtils.toString(resEntity, "UTF-8");
+                } else {
+                    GzipDecompressingEntity gzipEntity = new GzipDecompressingEntity(resEntity);
+                    InputStream in = gzipEntity.getContent();
+                    data = getHTMLContent(in);
+                }
+            }
+        } catch (IOException var19) {
+            logger.warn("Http postjson error", var19);
+            throw var19;
+        } catch (Exception e){
+            logger.warn("Http postjson error", e);
+            throw e;
+        } finally {
+            post.releaseConnection();
+        }
+
+        return data;
+    }
+
+    private static String getHTMLContent(InputStream in) {
+        StringBuffer sb = new StringBuffer();
+        BufferedReader br = new BufferedReader(new InputStreamReader(in));
+
+        try {
+            String line = null;
+
+            while((line = br.readLine()) != null) {
+                sb.append(line);
+            }
+        } catch (IOException var12) {
+            logger.error("getHTMLContent error", var12);
+        } finally {
+            try {
+                br.close();
+            } catch (IOException var11) {
+                logger.error("getHTMLContent error", var11);
+            }
+
+        }
+
+        return sb.toString();
+    }
+
+    private static HttpClient createHttpClient(int connectionTimeout, int readTimeout) {
+        HttpClient client = new DefaultHttpClient();
+        HttpParams httpParams = client.getParams();
+        HttpConnectionParams.setConnectionTimeout(httpParams, connectionTimeout);
+        HttpConnectionParams.setSoTimeout(httpParams, readTimeout);
+        return client;
+    }
+
+    public static HttpClient wrapperHttpClient(int connectionTimeout, int readTimeout) {
+        try {
+            final X509TrustManager trustManager = new X509TrustManager() {
+                @Override
+                public X509Certificate[] getAcceptedIssuers() {
+                    return null;
+                }
+
+                public void checkClientTrusted(final javax.security.cert.X509Certificate[] arg0, final String arg1) throws CertificateException {
+                }
+
+                public void checkServerTrusted(final javax.security.cert.X509Certificate[] arg0, final String arg1) throws CertificateException {
+                }
+
+                @Override
+                public void checkClientTrusted(final X509Certificate[] chain, final String authType) throws java.security.cert.CertificateException {
+                }
+
+                @Override
+                public void checkServerTrusted(final X509Certificate[] chain, final String authType) throws java.security.cert.CertificateException {
+                }
+            };
+            SSLContext ctx = SSLContext.getInstance("TLS");
+            ctx.init((KeyManager[])null, new TrustManager[]{trustManager}, (SecureRandom)null);
+            SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory(ctx, NoopHostnameVerifier.INSTANCE);
+            RequestConfig requestConfig = RequestConfig.custom().setCookieSpec("standard-strict").setConnectTimeout(connectionTimeout).setConnectionRequestTimeout(connectionTimeout).setSocketTimeout(readTimeout).setExpectContinueEnabled(Boolean.TRUE).setTargetPreferredAuthSchemes(Arrays.asList("NTLM", "Digest")).setProxyPreferredAuthSchemes(Arrays.asList("Basic")).build();
+            Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory>create().register("http", PlainConnectionSocketFactory.INSTANCE).register("https", socketFactory).build();
+            PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager(socketFactoryRegistry);
+            CloseableHttpClient closeableHttpClient = HttpClients.custom().setConnectionManager(connectionManager).setDefaultRequestConfig(requestConfig).build();
+            return closeableHttpClient;
+        } catch (Exception var9) {
+            logger.error("包装无证书校验客户端失败:" + var9.getMessage());
+            return null;
+        }
+    }
+}