备注:本处代码使用groovy和httpclient4.3作为例子进行讲述

在普通方式下,当使用httpclient进行访问某个网站时,大致使用如下的代码进行访问:

CloseableHttpClient httpclient = HttpClients.createDefault();

HttpGet httpMethod = new HttpGet(url);

response = httpclient.execute(httpMethod);

当使用上述代码来访问https的网站时,就会抛出如下的异常:

javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

要解决此问题,可以通过如下的方式:

首先创建一个类DefaultTrustManager

class DefaultTrustManager implements X509TrustManager{
@Override
void checkClientTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException { } @Override
void checkServerTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException { } @Override
X509Certificate[] getAcceptedIssuers() {
return null
}
}

然后在创建httpclient时,使用如下的代码:

def trustManagers =  new TrustManager[1]
trustManagers[0] = new DefaultTrustManager() SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(new KeyManager[0], trustManagers, new SecureRandom());
SSLContext.setDefault(sslContext); sslContext.init(null, trustManagers, null);
SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext,
SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); CloseableHttpClient httpclient = HttpClients.custom()
.setSSLSocketFactory(sslsf)
.build();

这样在访问某些https的网站时就能正常访问了。

如何访问https的网站?-【httpclient】的更多相关文章

  1. 只要是使用函数file_get_contents访问 https 的网站都要开启

    使用file_get_contents();报错failed to open stream: Unable to find the socket transport "ssl" - ...

  2. Android如何使用WebView访问https的网站

    Android中可以用WebView来访问http和https的网站,但是默认访问https网站时,假如证书不被Android承认,会出现空白页面,且不会有任何提示信息,这时我们必须加多一些配置. 此 ...

  3. Firefox访问https的网站,一直提示不安全

    http://mozilla.com.cn/thread-374897-1-1.html 要激活此功能步骤如下: 在地址栏键入"about:config" 点击“我了解此风险” 在 ...

  4. 使用 requests 访问 HTTPS

    当我们访问 HTTPS 的网站时,需要进行证书验证,在浏览器中可以自动处理验证问题,在 Python 中有以下两种做法: import requests //不进行证书验证,但这种方式会出现警告,如下 ...

  5. idhttp访问HTTPS

    idhttp访问HTTPS 访问一个 WEB 网站,如果采用 HTTP 的话,直接使用 TIdHTTP 这个控件,最简单的用法是: S := IdHTTP1.Get('www.qq.com'); 这里 ...

  6. Delphi 访问https /SSL、OpenSSL

    访问 Web 网站,最简单用法直接使用 TIdHTTP 控件: 例如:AA := IdHTTP1.Get('www.baidu.com.'); 访问 https 的网站,需要 SSL 库. 在 Win ...

  7. c# 中HttpClient访问Https网站

    c# 中HttpClient访问Https网站,加入如下代码: handler = new HttpClientHandler() ;handler.AllowAutoRedirect = true; ...

  8. AFNetworking 原作者都无法解决的问题: 如何使用ip直接访问https网站?

    背景 最近App似乎有报异常是DNS无法解析,尝试解决此问题.搜集到的资料很少,甚至连AFN原作者都判定这可能是一个无解的问题,参见: https://github.com/AFNetworking/ ...

  9. Python使用requests模块访问HTTPS网站报错`certificate verify failed`

    使用requests模块访问HTTPS网站报错: SNIMissingWarning: An HTTPS request has been made, but the SNI (Subject Nam ...

随机推荐

  1. Latex所有常用数学符号整理

    原文地址:https://blog.csdn.net/ying_xu/article/details/51240291 这段时间用Latex很多,常常需要查阅相关特殊的符号,这里做一个整理,也方便大家 ...

  2. POJ3580 SuperMemo splay伸展树,区间操作

    题意:实现一种数据结构,支持对一个数列的 6 种操作:第 x 个数到第 y 个数之间的数每个加 D:第 x 个数到第 y 个数之间全部数翻转:第 x 个数到第 y 个数之间的数,向后循环流动 c 次, ...

  3. codeforces411div.2

    每日CF: 411div2 Solved A CodeForces 805A Fake NP Solved B CodeForces 805B 3-palindrome Solved C CodeFo ...

  4. socket 通信 error:88

    调用函数(setsockopt)来设置 recv buffer 和send  buffer时报错: setsockopt error: Socket operation on non-socket(e ...

  5. Ubuntu 关闭触摸板

    1.关闭 sudo modporbe -r psmouse 2.开启 sudo modprobe psmouse

  6. PHP一维数组转二维数组正则表达式

    2017年11月20日17:17:08 array(1 => '哈哈')  变成  array('id' => 1, 'name' => '哈哈') 查找目标:  (\d)\s=&g ...

  7. DHTMLX Tree中文开发指导

    专业版1.6下载地址(CSDN) http://download.csdn.net/source/1388340 版本号:dhtmlxTree v.1.6 Professional edition b ...

  8. 如何将代码通过vs2017加载到GitHub

    (1)登陆GitHub并注册账户,在用户中新建repository  (2)建立后,会给出新建repository地址,将其复制  (3)用VS新建一个项目,勾选“新建Git存储库”或者打开一个已经创 ...

  9. select下拉框插件jquery.editable-select

    项目中有个需求,下拉框既可以下拉选择,也可以手动填写 html代码 <span>数据来源</span> </select> js代码 $('#noMean').ed ...

  10. 什么是java序列化,如何实现java 序列化?

    序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化. 可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间.序列化是为了解决在对对象流进行读写操作时所引发的问题.  ...