{"id":898,"date":"2024-01-12T14:24:20","date_gmt":"2024-01-12T06:24:20","guid":{"rendered":"http:\/\/22pig.com\/?p=898"},"modified":"2024-01-12T14:24:21","modified_gmt":"2024-01-12T06:24:21","slug":"javahttputils-httpclient-%e8%bf%9e%e6%8e%a5https%e9%a1%b5%e9%9d%a2","status":"publish","type":"post","link":"http:\/\/22pig.com\/?p=898","title":{"rendered":"[java]HttpUtils HttpClient  \u8fde\u63a5https\u9875\u9762"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">HttpUtils.java<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\nimport com.alibaba.fastjson.JSONObject;\nimport org.apache.commons.lang.StringUtils;\nimport org.apache.http.HttpResponse;\nimport org.apache.http.NameValuePair;\nimport org.apache.http.client.HttpClient;\nimport org.apache.http.client.entity.UrlEncodedFormEntity;\nimport org.apache.http.client.methods.*;\nimport org.apache.http.client.utils.URIBuilder;\nimport org.apache.http.conn.ClientConnectionManager;\nimport org.apache.http.conn.scheme.Scheme;\nimport org.apache.http.conn.scheme.SchemeRegistry;\nimport org.apache.http.conn.ssl.SSLSocketFactory;\nimport org.apache.http.entity.ByteArrayEntity;\nimport org.apache.http.entity.StringEntity;\nimport org.apache.http.impl.client.CloseableHttpClient;\nimport org.apache.http.impl.client.DefaultHttpClient;\nimport org.apache.http.impl.client.HttpClients;\nimport org.apache.http.message.BasicNameValuePair;\nimport org.apache.http.util.EntityUtils;\n\nimport javax.net.ssl.SSLContext;\nimport javax.net.ssl.TrustManager;\nimport javax.net.ssl.X509TrustManager;\nimport java.io.IOException;\nimport java.io.UnsupportedEncodingException;\nimport java.net.URI;\nimport java.net.URLEncoder;\nimport java.nio.charset.Charset;\nimport java.security.KeyManagementException;\nimport java.security.NoSuchAlgorithmException;\nimport java.security.cert.X509Certificate;\nimport java.util.ArrayList;\nimport java.util.List;\nimport java.util.Map;\n\npublic class HttpUtils {\n\n    \/**\n     * get\n     *\n     * @param host\n     * @param path\n     * @param method\n     * @param headers\n     * @param querys\n     * @return\n     * @throws Exception\n     *\/\n    public static HttpResponse doGet(String host, String path, String method,\n                                     Map&lt;String, String> headers,\n                                     Map&lt;String, String> querys)\n            throws Exception {\n        HttpClient httpClient = wrapClient(host);\n\n        HttpGet request = new HttpGet(buildUrl(host, path, querys));\n        for (Map.Entry&lt;String, String> e : headers.entrySet()) {\n            request.addHeader(e.getKey(), e.getValue());\n        }\n\n        return httpClient.execute(request);\n    }\n\n    \/**\n     * post form\n     *\n     * @param host\n     * @param path\n     * @param method\n     * @param headers\n     * @param querys\n     * @param bodys\n     * @return\n     * @throws Exception\n     *\/\n    public static HttpResponse doPost(String host, String path, String method,\n                                      Map&lt;String, String> headers,\n                                      Map&lt;String, String> querys,\n                                      Map&lt;String, String> bodys)\n            throws Exception {\n        HttpClient httpClient = wrapClient(host);\n\n        HttpPost request = new HttpPost(buildUrl(host, path, querys));\n        for (Map.Entry&lt;String, String> e : headers.entrySet()) {\n            request.addHeader(e.getKey(), e.getValue());\n        }\n\n        if (bodys != null) {\n            List&lt;NameValuePair> nameValuePairList = new ArrayList&lt;NameValuePair>();\n\n            for (String key : bodys.keySet()) {\n                nameValuePairList.add(new BasicNameValuePair(key, bodys.get(key)));\n            }\n            UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(nameValuePairList, \"utf-8\");\n            formEntity.setContentType(\"application\/x-www-form-urlencoded; charset=UTF-8\");\n            request.setEntity(formEntity);\n        }\n\n        return httpClient.execute(request);\n    }\n\n    \/**\n     * Post String\n     *\n     * @param host\n     * @param path\n     * @param method\n     * @param headers\n     * @param querys\n     * @param body\n     * @return\n     * @throws Exception\n     *\/\n    public static HttpResponse doPost(String host, String path, String method,\n                                      Map&lt;String, String> headers,\n                                      Map&lt;String, String> querys,\n                                      String body)\n            throws Exception {\n        HttpClient httpClient = wrapClient(host);\n\n        HttpPost request = new HttpPost(buildUrl(host, path, querys));\n        for (Map.Entry&lt;String, String> e : headers.entrySet()) {\n            request.addHeader(e.getKey(), e.getValue());\n        }\n\n        if (StringUtils.isNotBlank(body)) {\n            request.setEntity(new StringEntity(body, \"utf-8\"));\n        }\n\n        return httpClient.execute(request);\n    }\n\n    \/**\n     * Post stream\n     *\n     * @param host\n     * @param path\n     * @param method\n     * @param headers\n     * @param querys\n     * @param body\n     * @return\n     * @throws Exception\n     *\/\n    public static HttpResponse doPost(String host, String path, String method,\n                                      Map&lt;String, String> headers,\n                                      Map&lt;String, String> querys,\n                                      byte&#91;] body)\n            throws Exception {\n        HttpClient httpClient = wrapClient(host);\n\n        HttpPost request = new HttpPost(buildUrl(host, path, querys));\n        for (Map.Entry&lt;String, String> e : headers.entrySet()) {\n            request.addHeader(e.getKey(), e.getValue());\n        }\n\n        if (body != null) {\n            request.setEntity(new ByteArrayEntity(body));\n        }\n\n        return httpClient.execute(request);\n    }\n\n    \/**\n     * Put String\n     *\n     * @param host\n     * @param path\n     * @param method\n     * @param headers\n     * @param querys\n     * @param body\n     * @return\n     * @throws Exception\n     *\/\n    public static HttpResponse doPut(String host, String path, String method,\n                                     Map&lt;String, String> headers,\n                                     Map&lt;String, String> querys,\n                                     String body)\n            throws Exception {\n        HttpClient httpClient = wrapClient(host);\n\n        HttpPut request = new HttpPut(buildUrl(host, path, querys));\n        for (Map.Entry&lt;String, String> e : headers.entrySet()) {\n            request.addHeader(e.getKey(), e.getValue());\n        }\n\n        if (StringUtils.isNotBlank(body)) {\n            request.setEntity(new StringEntity(body, \"utf-8\"));\n        }\n\n        return httpClient.execute(request);\n    }\n\n    \/**\n     * Put stream\n     *\n     * @param host\n     * @param path\n     * @param method\n     * @param headers\n     * @param querys\n     * @param body\n     * @return\n     * @throws Exception\n     *\/\n    public static HttpResponse doPut(String host, String path, String method,\n                                     Map&lt;String, String> headers,\n                                     Map&lt;String, String> querys,\n                                     byte&#91;] body)\n            throws Exception {\n        HttpClient httpClient = wrapClient(host);\n\n        HttpPut request = new HttpPut(buildUrl(host, path, querys));\n        for (Map.Entry&lt;String, String> e : headers.entrySet()) {\n            request.addHeader(e.getKey(), e.getValue());\n        }\n\n        if (body != null) {\n            request.setEntity(new ByteArrayEntity(body));\n        }\n\n        return httpClient.execute(request);\n    }\n\n    \/**\n     * Delete\n     *\n     * @param host\n     * @param path\n     * @param method\n     * @param headers\n     * @param querys\n     * @return\n     * @throws Exception\n     *\/\n    public static HttpResponse doDelete(String host, String path, String method,\n                                        Map&lt;String, String> headers,\n                                        Map&lt;String, String> querys)\n            throws Exception {\n        HttpClient httpClient = wrapClient(host);\n\n        HttpDelete request = new HttpDelete(buildUrl(host, path, querys));\n        for (Map.Entry&lt;String, String> e : headers.entrySet()) {\n            request.addHeader(e.getKey(), e.getValue());\n        }\n\n        return httpClient.execute(request);\n    }\n\n    private static String buildUrl(String host, String path, Map&lt;String, String> querys) throws UnsupportedEncodingException {\n        StringBuilder sbUrl = new StringBuilder();\n        sbUrl.append(host);\n        if (!StringUtils.isBlank(path)) {\n            sbUrl.append(path);\n        }\n        if (null != querys) {\n            StringBuilder sbQuery = new StringBuilder();\n            for (Map.Entry&lt;String, String> query : querys.entrySet()) {\n                if (0 &lt; sbQuery.length()) {\n                    sbQuery.append(\"&amp;\");\n                }\n                if (StringUtils.isBlank(query.getKey()) &amp;&amp; !StringUtils.isBlank(query.getValue())) {\n                    sbQuery.append(query.getValue());\n                }\n                if (!StringUtils.isBlank(query.getKey())) {\n                    sbQuery.append(query.getKey());\n                    if (!StringUtils.isBlank(query.getValue())) {\n                        sbQuery.append(\"=\");\n                        sbQuery.append(URLEncoder.encode(query.getValue(), \"utf-8\"));\n                    }\n                }\n            }\n            if (0 &lt; sbQuery.length()) {\n                sbUrl.append(\"?\").append(sbQuery);\n            }\n        }\n\n        return sbUrl.toString();\n    }\n\n    private static HttpClient wrapClient(String host) {\n        HttpClient httpClient = new DefaultHttpClient();\n        if (host.startsWith(\"https:\/\/\")) {\n            sslClient(httpClient);\n        }\n\n        return httpClient;\n    }\n\n    private static void sslClient(HttpClient httpClient) {\n        try {\n            SSLContext ctx = SSLContext.getInstance(\"TLS\");\n            X509TrustManager tm = new X509TrustManager() {\n                public X509Certificate&#91;] getAcceptedIssuers() {\n                    return null;\n                }\n\n                public void checkClientTrusted(X509Certificate&#91;] xcs, String str) {\n\n                }\n\n                public void checkServerTrusted(X509Certificate&#91;] xcs, String str) {\n\n                }\n            };\n            ctx.init(null, new TrustManager&#91;]{tm}, null);\n            SSLSocketFactory ssf = new SSLSocketFactory(ctx);\n            ssf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);\n            ClientConnectionManager ccm = httpClient.getConnectionManager();\n            SchemeRegistry registry = ccm.getSchemeRegistry();\n            registry.register(new Scheme(\"https\", 443, ssf));\n        } catch (KeyManagementException ex) {\n            throw new RuntimeException(ex);\n        } catch (NoSuchAlgorithmException ex) {\n            throw new RuntimeException(ex);\n        }\n    }\n\n    \/**\n     * \u53d1\u9001 get \u8bf7\u6c42\n     *\n     * @param url \u8bf7\u6c42\u5730\u5740\n     * @return \u8bf7\u6c42\u7ed3\u679c\n     *\/\n    public static String get(String url) {\n        String result = null;\n        CloseableHttpResponse response = null;\n        CloseableHttpClient httpclient = HttpClients.createDefault();\n        try {\n            \/\/ \u521b\u5efauri\n            URIBuilder builder = new URIBuilder(url);\n            URI uri = builder.build();\n            \/\/ \u521b\u5efahttp GET\u8bf7\u6c42\n            HttpGet httpGet = new HttpGet(uri);\n            \/\/ \u6267\u884c\u8bf7\u6c42\n            response = httpclient.execute(httpGet);\n            if (response.getStatusLine().getStatusCode() == 200) {\n                result = EntityUtils.toString(response.getEntity(), \"UTF-8\");\n            }\n        } catch (Exception e) {\n            e.printStackTrace();\n        }\n        return result;\n    }\n\n    \/**\n     * \u53d1\u9001 post \u8bf7\u6c42\n     *\n     * @param url     \u8bf7\u6c42\u5730\u5740\n     * @param param Form\u8868\u5355json\u5b57\u7b26\u4e32\n     * @return \u8bf7\u6c42\u7ed3\u679c\n     *\/\n    public static String post(String url, Object param) {\n        \/\/ \u521b\u5efahttpClient\n        CloseableHttpClient httpClient = HttpClients.createDefault();\n        \/\/ \u521b\u5efapost\u8bf7\u6c42\u65b9\u5f0f\u5b9e\u4f8b\n        HttpPost httpPost = new HttpPost(url);\n\n        \/\/ \u8bbe\u7f6e\u8bf7\u6c42\u5934 \u53d1\u9001\u7684\u662fjson\u6570\u636e\u683c\u5f0f\n        httpPost.setHeader(\"Content-type\", \"application\/json;charset=utf-8\");\n        httpPost.setHeader(\"Connection\", \"Close\");\n\n        \/\/ \u8bbe\u7f6e\u53c2\u6570---\u8bbe\u7f6e\u6d88\u606f\u5b9e\u4f53 \u4e5f\u5c31\u662f\u643a\u5e26\u7684\u6570\u636e\n        StringEntity entity = new StringEntity(JSONObject.toJSONString(param), Charset.forName(\"UTF-8\"));\n        \/\/ \u8bbe\u7f6e\u7f16\u7801\u683c\u5f0f\n        entity.setContentEncoding(\"UTF-8\");\n        \/\/ \u53d1\u9001Json\u683c\u5f0f\u7684\u6570\u636e\u8bf7\u6c42\n        entity.setContentType(\"application\/json\");\n        \/\/ \u628a\u8bf7\u6c42\u6d88\u606f\u5b9e\u4f53\u585e\u8fdb\u53bb\n        httpPost.setEntity(entity);\n\n        \/\/ \u6267\u884chttp\u7684post\u8bf7\u6c42\n        CloseableHttpResponse httpResponse;\n        String result = null;\n        try {\n            httpResponse = httpClient.execute(httpPost);\n            result = EntityUtils.toString(httpResponse.getEntity(), \"UTF-8\");\n        } catch (IOException e) {\n            e.printStackTrace();\n        }\n\n        return result;\n    }\n\n\n\n\n}\n\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">HttpClientFactory.java<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import javax.net.ssl.HostnameVerifier;\nimport javax.net.ssl.SSLContext;\nimport javax.net.ssl.X509TrustManager;\n\nimport org.apache.http.client.HttpClient;\nimport org.apache.http.conn.ssl.SSLConnectionSocketFactory;\nimport org.apache.http.conn.ssl.SSLContexts;\n\nimport org.apache.http.impl.client.CloseableHttpClient;\nimport org.apache.http.impl.client.HttpClients;\n\nimport java.security.SecureRandom;\nimport java.security.cert.CertificateException;\nimport java.security.cert.X509Certificate;\n\npublic class HttpClientFactory {\n\n    private static CloseableHttpClient client;\n\n    public static CloseableHttpClient getHttpsClient() throws Exception {\n\n        if (client != null) {\n            return client;\n        }\n\n        \/*\n                    SSLContext sslContext = new SSLContextBuilder()\n                    .loadTrustMaterial(null, (TrustStrategy) (chain, authType) -&gt; true)\n                    .build();\n            HostnameVerifier verifier = (s, sslSession) -&gt; true;\n            SSLConnectionSocketFactory factory = new SSLConnectionSocketFactory(sslContext, verifier);\n\n         *\/\n        SSLContext sslcontext = SSLContexts.custom().useSSL().build();\n        sslcontext.init(null, new X509TrustManager&#91;]{new HttpsTrustManager()}, new SecureRandom());\n\n        HostnameVerifier verifier = (s, sslSession) -&gt; true;\n        SSLConnectionSocketFactory factory = new SSLConnectionSocketFactory(sslcontext,verifier);\/\/SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER\n        client = HttpClients.custom().setSSLSocketFactory(factory).build();\n\n        return client;\n    }\n\n    public static void releaseInstance() {\n        client = null;\n    }\n}\n\n\nclass HttpsTrustManager implements X509TrustManager {\n\n    @Override\n    public void checkClientTrusted(X509Certificate&#91;] arg0, String arg1)\n            throws CertificateException {\n        \/\/ TODO Auto-generated method stub\n\n    }\n\n    @Override\n    public void checkServerTrusted(X509Certificate&#91;] arg0, String arg1)\n            throws CertificateException {\n        \/\/ TODO Auto-generated method stub\n\n    }\n\n    @Override\n    public X509Certificate&#91;] getAcceptedIssuers() {\n        return new X509Certificate&#91;]{};\n    }\n\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Main.java<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>public class Main {\r\n    public static void main(String&#91;] args) {\r\n        String result = HttpUtils.get(\"https:\/\/www.baidu.com\/\");\r\n        System.out.println(result);\r\n\r\n    }\r\n}<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>HttpUtils.java HttpClientFactory.java Main.java<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7],"tags":[],"class_list":["post-898","post","type-post","status-publish","format-standard","hentry","category-java"],"_links":{"self":[{"href":"http:\/\/22pig.com\/index.php?rest_route=\/wp\/v2\/posts\/898","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/22pig.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/22pig.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/22pig.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/22pig.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=898"}],"version-history":[{"count":4,"href":"http:\/\/22pig.com\/index.php?rest_route=\/wp\/v2\/posts\/898\/revisions"}],"predecessor-version":[{"id":907,"href":"http:\/\/22pig.com\/index.php?rest_route=\/wp\/v2\/posts\/898\/revisions\/907"}],"wp:attachment":[{"href":"http:\/\/22pig.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=898"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/22pig.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=898"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/22pig.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=898"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}