基于 httpClient 请求 Https接口

这篇具有很好参考价值的文章主要介绍了基于 httpClient 请求 Https接口。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

代码如下,亲测可用文章来源地址https://www.toymoban.com/news/detail-806533.html

package com.huawei.fs.bip.utils;

import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.http.client.config.CookieSpecs;
import org.apache.http.client.config.RequestConfig;
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.conn.ssl.TrustStrategy;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.apache.http.ssl.SSLContextBuilder;
import org.apache.http.util.EntityUtils;

import java.io.IOException;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.Map;

public class HttpsUtil {

    private static String result;
    private static String TLS = "TLS";
    private static String GET = "GET";
    private static String POST = "POST";

    private static final String DEFAULT_CHARSET = "UTF-8";

    private static final String HEADER_CONTENT_JSON = "application/json";

    private static CloseableHttpClient httpClient;
    
    private static ObjectMapper mapper = new ObjectMapper();

    private static PoolingHttpClientConnectionManager cm;

    private static final String HTTP = "http";

    private static final String HTTPS = "https";

    private static SSLContextBuilder sslContextBuilder = null;

    private static SSLConnectionSocketFactory sslConnectionSocketFactory = null;

    private static PoolingHttpClientConnectionManager poolingHttpClientConnectionManager = null;


    /**
     * 记录开放平台请求结果
     */
    public static class Response {
        /**
         * 该请求的 http 状态码
         * 200 为正常的返回结果
         */
        private int status;

        /**
         * 请求返回消息
         * 当 status == 200 时会返回 response body 中的字符串
         * 当 status !== 200 时会返回具体的错误信息
         */
        private String result;

        public int getStatus() {
            return status;
        }

        public void setStatus(int status) {
            this.status = status;
        }

        public String getResult() {
            return result;
        }

        public void setResult(String result) {
            this.result = result;
        }
    }

    static {
        cm = new PoolingHttpClientConnectionManager();
        cm.setMaxTotal(500);
        cm.setDefaultMaxPerRoute(50);

        RequestConfig globalConfig = RequestConfig.custom()
                .setConnectionRequestTimeout(200000).setConnectTimeout(200000)
                .setSocketTimeout(500000).setCookieSpec(CookieSpecs.IGNORE_COOKIES).build();
        HttpClientBuilder httpClientBuilder = HttpClients.custom();
        try {
            sslContextBuilder = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() {
                @Override
                public boolean isTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
                    return true;
                }
            });
            sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContextBuilder.build(), new String[]{"SSLv2Hello", "SSLv3", "TLSv1", "TLSv1.2"}, null, NoopHostnameVerifier.INSTANCE);
            Registry<ConnectionSocketFactory> registryBuilder = RegistryBuilder.<ConnectionSocketFactory>create()
                    .register(HTTP, new PlainConnectionSocketFactory()).register(HTTPS, sslConnectionSocketFactory).build();
            poolingHttpClientConnectionManager = new PoolingHttpClientConnectionManager(registryBuilder);
            poolingHttpClientConnectionManager.setMaxTotal(500);
        } catch (Exception e) {
            e.printStackTrace();
        }
        httpClient = httpClientBuilder.setConnectionManager(cm).setSSLSocketFactory(sslConnectionSocketFactory)
                .setConnectionManager(poolingHttpClientConnectionManager).setDefaultRequestConfig(globalConfig).build();
    }

    private static CloseableHttpClient getHttpClient(){
        return httpClient;
    }

    public static <T> T doGet(String requestUrl, Map<String, String> paramMap, Class<T> type) throws IOException {
        return mapper.readValue(doGet(requestUrl, paramMap), type);
    }

    public static <T> T doGet(String requestUrl, Map<String, String> paramMap, TypeReference<T> typeReference) throws IOException {
        return mapper.readValue(doGet(requestUrl, paramMap), typeReference);
    }

    public static String doGet(String requestUrl, Map<String, String> paramMap) throws IOException {
        CloseableHttpClient httpClient = getHttpClient();
        StringBuilder param = new StringBuilder("?");
        if (paramMap != null) {
            for(Map.Entry<String, String> entry: paramMap.entrySet()) {
                param.append(entry.getKey());
                param.append("=");
                param.append(entry.getValue());
                param.append("&");
            }
            param.deleteCharAt(param.length() - 1);
        }

        HttpGet get = new HttpGet(requestUrl + param);
        String responseString = httpClient.execute(get, response -> EntityUtils.toString(response.getEntity()));
        get.releaseConnection();
        return responseString;
    }

}

到了这里,关于基于 httpClient 请求 Https接口的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 网络原理 - HTTP / HTTPS(5)——https协议

    目录 一、HTTPS是什么 为什么要进行加密 二、“加密” 是什么 三、HTTPS的工作过程 (1)引入对称加密 对称密钥的特点: (2)引入非对称加密 非对称加密的特点: (3)中间人攻击 (4)引入证书 1、证书的介绍 2、证书验证过程 3、几个关键问题(黑客不能篡改证书的原因)

    2024年04月17日
    浏览(30)
  • 网络原理 - HTTP / HTTPS(1)——http请求

    目录 一、认识HTTP协议 理解 应用层协议 二、fiddler的安装以及介绍 1、fiddler的安装 2、fiddler的介绍 http请求 三、HTTP 报文格式 1、http的请求 2、http的响应 五、认识URL (1)协议方案名 (2)登录信息(认证) (3)服务器地址 (4)服务器的端口号 (5)带层次的文件路径 (6)

    2024年04月16日
    浏览(69)
  • 网络原理 - HTTP / HTTPS(4)——构造http请求

    目录 一、postman 的下载安装以及简单介绍 1、下载安装 2、postman的介绍 二、通过 Java socket 构造 HTTP 请求         构造http请求的方式有两种: (1)通过代码构造 (有一点难度)        (2)通过第三方工具构造 (非常容易)。         下面介绍第三方工具构造http请求,这

    2024年04月17日
    浏览(31)
  • 微信小程序只支持https请求,如何解决对于一些接口是http请求的?

    微信小程序支持使用 wx.request() 发起 HTTPS 网络请求。 如果后台接口是 HTTP 协议,则需要您在服务端做一个转发,将 HTTPS 请求转发到 HTTP 接口上。这样,就可以在微信小程序中使用 HTTPS 协议访问 HTTP 接口了。 例如,可以在服务端使用 Node.js 做一个简单的转发: 然后,在微信

    2024年02月12日
    浏览(35)
  • 计算机网络 - http协议 与 https协议(2)

    本篇介绍了构造http请求的的五种方式,简单的使用postman构造http请求,进一步了解https, 学习https的加密过程,了解对称密钥与非对称密钥对于加密是如何进行的,如有错误,请在评论区指正,让我们一起交流,共同进步! 本文开始 1) 直接在浏览器中的地址栏中输入一个 u

    2024年02月13日
    浏览(44)
  • HTTP 和 HTTPS 协议原理【网络基础】

    友情链接: HTTP协议【网络基础/应用层】 简单:HTTP 是一种文本协议,易于理解和实现。HTTP 的请求和响应都由起始行、首部字段和可选的消息主体组成,每个部分都有明确的语法规则。HTTP 的方法、状态码和首部字段都有标准化的定义,方便开发者遵循。 灵活:HTTP 是一种无

    2024年02月09日
    浏览(44)
  • 解决 Https 站点请求 Http 接口服务后报 the content must be served over HTTPS 错误的问题

    之前将自己所有的 Http 站点全部更新为 Https 站点,但是在请求后台接口服务的时候还是 Http 请求,导致部署之后,直接在控制台报 This request has been blocked; the content must be served over HTTPS; 的错误 因为我不想耗费精力,将所有的后台接口服务也更新为支持 Https 请求,所以访问了

    2024年02月16日
    浏览(35)
  • 网络爬虫-----http和https的请求与响应原理

      目录 前言 简介 HTTP的请求与响应 浏览器发送HTTP请求的过程: HTTP请求主要分为Get和Post两种方法 查看网页请求 常用的请求报头 1. Host (主机和端口号) 2. Connection (链接类型) 3. Upgrade-Insecure-Requests (升级为HTTPS请求) 4. User-Agent (浏览器名称) 5. Accept (传输文件类型) 举例: 6. Ref

    2024年02月07日
    浏览(36)
  • 网络爬虫——HTTP和HTTPS的请求与响应原理

    目录 一、HTTP的请求与响应 二、浏览器发送HTTP请求的过程 三、HTTP请求方法 四、查看网页请求 五、常用的请求报头 六、服务端HTTP响应 七、常用的响应报头 八、Cookie 和 Session 九、响应状态码 十、网页的两种加载方法 十一、认识网页源码的构成 十二、爬虫协议 在如今这个

    2024年02月08日
    浏览(30)
  • 网络协议分析-http/https/tcp/udp

    “三次握手”的目的是“为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生 错误”。主要目的防止 server 端一直等待,浪费资源。换句话说,即是为了保证服务端能收 接受到客户端的信息并能做出正确的应答而进行前两次(第一次和第二次)握手,为了保证客

    2024年02月11日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包