HttpClient访问https接口

前置知识

需要对证书认证有所了解。

访问https接口

使用httpClient访问比如百度的首页时,这是一个https协议的地址,由于JDK内置了一些大型CA机构的公钥证书(根证书),所以httpClient会信任这些CA机构颁发的证书,程序能够正常访问。

当访问自签证书的接口时,就需要客户端自己对服务器进行校验了。

操作系统也有内置的证书,但是无法影响java程序。

httpclient配置

以httpclient 的4.5.3版本为例,配置代码如下:

SSLContext sslContext = null;
try {
    sslContext = SSLContexts.custom().loadTrustMaterial(null, (cert, authType) -> true).build();
} catch (NoSuchAlgorithmException e) {
    throw new RuntimeException(e);
} catch (KeyManagementException e) {
    throw new RuntimeException(e);
} catch (KeyStoreException e) {
    throw new RuntimeException(e);
}
SSLConnectionSocketFactory sslConFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);

CloseableHttpClient httpClient = HttpClients.custom().setSSLSocketFactory(sslContext);

如果配置了连接池,配置代码如下:

SSLContext sslContext = null;
try {
    sslContext = SSLContexts.custom().loadTrustMaterial(null, (cert, authType) -> true).build();
} catch (NoSuchAlgorithmException e) {
    throw new RuntimeException(e);
} catch (KeyManagementException e) {
    throw new RuntimeException(e);
} catch (KeyStoreException e) {
    throw new RuntimeException(e);
}
SSLConnectionSocketFactory sslConFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);

Registry<ConnectionSocketFactory> registry = RegistryBuilder.<ConnectionSocketFactory>create()
                .register("https", sslConFactory)
                .register("http", PlainConnectionSocketFactory.getSocketFactory())
                .build();

PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager(registry);
        // Increase max total connection to 200
        cm.setMaxTotal(200);
        // Increase default max connection per route to 20
        cm.setDefaultMaxPerRoute(20);

CloseableHttpClient httpClient = HttpClients.custom().setConnectionManager(cm);

当使用连接池时,配置稍有不同。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值