使用fluent api调用https接口时忽略证书异常

发布时间 2023-10-26 14:43:38作者: 青索

不知道为啥,中文互联网对脱胎于httpclient的fluent api介绍太少了,遇到问题也不知道怎么查,只能自己研究,于是遇到问题赶紧记下来

一般情况下我们使用fluent的get方法调用http接口的方式是这样的

Request.get(url)
        .connectTimeout(Timeout.ofMilliseconds(5000))
        .execute()
        .returnResponse();

但如果是自签名的https接口,会报这样的错

javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: Certificates does not conform to algorithm constraints

常规的教程会让我们下载网站证书安装到本机,但是这样太复杂了,只需要对上述代码稍作改动即可

Request.get(url)
        .connectTimeout(Timeout.ofMilliseconds(5000))
     // 自签名证书无法通过校验,所以信任所有证书
        .execute(HttpClients.custom()
            .setConnectionManager(PoolingHttpClientConnectionManagerBuilder.create()
                .setSSLSocketFactory(SSLConnectionSocketFactoryBuilder.create()
                    .setSslContext(SSLContextBuilder.create()
                        .loadTrustMaterial(TrustAllStrategy.INSTANCE)
                        .build())
                    .setHostnameVerifier(NoopHostnameVerifier.INSTANCE)
                    .build())
                .build())
            .build())
        .returnResponse();

直接信任所有证书即可