• java实现http/https请求


    在Java中,有多种方式可以实现HTTP或HTTPS请求。以下是使用第三方库Apache HttpClient来实现HTTP/HTTPS请求的工具类。

    优势和特点

    URIBuilder的优势在于它提供了一种简单而灵活的方式来构造URI,帮助开发人员避免手动拼接URI字符串,并处理参数的编码和转义。此外,URIBuilder还提供了其他一些有用的方法,例如添加路径段、设置查询字符串等。这使得URI的构建过程更加清晰和易于管理。

    使用 Apache HttpClient

    要使用Apache HttpClient,你首先需要将HttpClient库添加到你的项目中。如果你使用Maven,可以在pom.xml中添加以下依赖:

     

        org.apache.httpcomponents 

        httpclient 

        4.5.13  

    然后,你可以使用以下代码示例来发送HTTP请求:

    import org.apache.commons.collections.MapUtils;

    import org.apache.http.HttpEntity;

    import org.apache.http.client.methods.CloseableHttpResponse;

    import org.apache.http.client.methods.HttpGet;

    import org.apache.http.client.utils.URIBuilder;

    import org.apache.http.conn.ssl.NoopHostnameVerifier;

    import org.apache.http.conn.ssl.SSLConnectionSocketFactory;

    import org.apache.http.conn.ssl.TrustStrategy;

    import org.apache.http.impl.client.CloseableHttpClient;

    import org.apache.http.impl.client.HttpClients;

    import org.apache.http.ssl.SSLContextBuilder;

    import org.apache.http.util.EntityUtils;

    import org.slf4j.Logger;

    import org.slf4j.LoggerFactory;

    import javax.net.ssl.HostnameVerifier;

    import javax.net.ssl.SSLContext;

    import java.io.IOException;

    import java.security.KeyManagementException;

    import java.security.KeyStoreException;

    import java.security.NoSuchAlgorithmException;

    import java.security.cert.CertificateException;

    import java.security.cert.X509Certificate;

    import java.util.HashMap;

    import java.util.Map;

    public class HttpsUtils {

        private static Logger logger = LoggerFactory.getLogger(HttpsUtils.class);

        static CloseableHttpClient httpClient;

        static CloseableHttpResponse httpResponse;

        public static CloseableHttpClient createSSLClientDefault() {

            try {

                SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() {

                    // 信任所有

                    public boolean isTrusted(X509Certificate[] chain, String authType) throws CertificateException {

                        return true;

                    }

                }).build();

                HostnameVerifier hostnameVerifier = NoopHostnameVerifier.INSTANCE;

                SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext, hostnameVerifier);

                return HttpClients.custom().setSSLSocketFactory(sslsf).build();

            } catch (KeyManagementException e) {

                e.printStackTrace();

            } catch (NoSuchAlgorithmException e) {

                e.printStackTrace();

            } catch (KeyStoreException e) {

                e.printStackTrace();

            }

            return HttpClients.createDefault();

        }

        /**

        * 发送https||http get请求

        *

        * @throws Exception

        */

        public static String sendByHttpGet(Map params, String url) {

            try {

                URIBuilder uriBuilder = new URIBuilder(url);

                if(MapUtils.isNotEmpty(params)) {

                    for (Map.Entry entry : params.entrySet()) {

                        uriBuilder.setParameter(entry.getKey(), entry.getValue().toString());

                    }

                }

                HttpGet httpGet = new HttpGet(uriBuilder.build());

                httpGet.addHeader("Content-type", "application/json; charset=utf-8");

                httpGet.setHeader("Accept", "application/json");

                httpClient = HttpsUtils.createSSLClientDefault();

                httpResponse = httpClient.execute(httpGet);

                HttpEntity httpEntity = httpResponse.getEntity();

                if (httpEntity != null) {

                    String jsObject = EntityUtils.toString(httpEntity, "UTF-8");

                    return jsObject;

                } else {

                    return null;

                }

            } catch (Exception e) {

                e.printStackTrace();

                logger.error("description : {{}} ,details : {{}}", "请求异常", e.getStackTrace());

            } finally {

                try {

                    httpResponse.close();

                    httpClient.close();

                } catch (IOException e) {

                    logger.error("description : {{}} ,details : {{}}", "请求流关闭异常", e.getStackTrace());

                    e.printStackTrace();

                }

            }

            return null;

        }

        /**

        * 发送https||http get请求

        *

        * @throws Exception

        */

        public static byte[] sendByteByHttpGet(Map params, String url) {

            try {

                URIBuilder uriBuilder = new URIBuilder(url);

                if(MapUtils.isNotEmpty(params)) {

                    for (Map.Entry entry : params.entrySet()) {

                        uriBuilder.setParameter(entry.getKey(), entry.getValue().toString());

                    }

                }

                HttpGet httpGet = new HttpGet(uriBuilder.build());

                httpGet.addHeader("Content-type", "application/json; charset=utf-8");

                httpGet.setHeader("Accept", "application/json");

                httpClient = HttpsUtils.createSSLClientDefault();

                httpResponse = httpClient.execute(httpGet);

                HttpEntity httpEntity = httpResponse.getEntity();

                if (httpEntity != null) {

                    byte[] bytes = EntityUtils.toByteArray(httpEntity);

                    return bytes;

                } else {

                    return new byte[0];

                }

            } catch (Exception e) {

                e.printStackTrace();

                logger.error("description : {{}} ,details : {{}}", "读取二进制保存的图片异常", e.getStackTrace());

            } finally {

                try {

                    httpResponse.close();

                    httpClient.close();

                } catch (IOException e) {

                    e.printStackTrace();

                    logger.error("description : {{}} ,details : {{}}", "读取二进制保存的图片关闭流时异常", e.getStackTrace());

                }

            }

            return new byte[0];

        }

    }

  • 相关阅读:
    深度学习二三事-循环神经网络回顾
    log_archive_dest_1 USE_DB_RECOVERY_FILE_DEST VALID_FOR
    Centos7 安装部署 Kubernetes(k8s) 高可用集群
    设计模式之备忘录模式 - 简书
    Vuex与前端表格施展“组合拳”,实现大屏展示应用的交互增强
    关于JPA +SpringBoot 遇到的一些问题及解决方法
    合并对象、合并数组的方法
    动态规划 --- 数位统计DP
    CDGA|到底怎么才能做好数据治理呢?
    MySQL数据类型
  • 原文地址:https://blog.csdn.net/weixin_58494422/article/details/140050860