我们的业务代码里有需要用爬虫爬取商品的图片地址,然后在转到我们的服务器里的过程,中间当然少不了下载图片的过程,最近目标网站有些改变,就是之前http前缀的图片地址部分改成了https,然后就造成了一个问题,图片下载不了,查看log,发现一个java的SSLException.

异常是: java.lang.RuntimeException:Received fatal alert: protocol_version

异常的根源是:javax.net.ssl.SSLException:  Received fatal alert: protocol_version.

----------------------------------------------------------------------------------------------------------------

原因是: https的请求需要加上ssl的验证,但是代码里一般只用到http,即使用到https也只是换了个前缀,并没有带上ssl验证的过程。

源代码:

     private static final PoolingHttpClientConnectionManager HTTP_CLIENT_CONNECTION_MANAGER;
private static final CloseableHttpClient HTTP_CLIENT;
static {
HTTP_CLIENT_CONNECTION_MANAGER = new PoolingHttpClientConnectionManager(RegistryBuilder
.<ConnectionSocketFactory> create().register("http", PlainConnectionSocketFactory.getSocketFactory())
.register("https", SSLConnectionSocketFactory.getSocketFactory()).build());
HTTP_CLIENT_CONNECTION_MANAGER.setDefaultMaxPerRoute(100);
HTTP_CLIENT_CONNECTION_MANAGER.setMaxTotal(200);
RequestConfig requestConfig = RequestConfig.custom().setConnectionRequestTimeout(60000).setConnectTimeout(60000)
.setSocketTimeout(60000).build(); HTTP_CLIENT = HttpClientBuilder.create().setConnectionManager(HTTP_CLIENT_CONNECTION_MANAGER)
.setDefaultRequestConfig(requestConfig).build();
}

HttpGet httpGet = new HttpGet(url + (StringUtils.contains(url, "?") ? "&" : "?")

+ EntityUtils.toString(new UrlEncodedFormEntity(nameValuePairs, "UTF-8")));

CloseableHttpResponse httpResponse = HTTP_CLIENT.execute(httpGet);

  

----------------------------------------------------------------------------------------------------------------

解决方法:加上SSL的验证,加上协议

修改后可用的代码:

private static final PoolingHttpClientConnectionManager HTTP_CLIENT_CONNECTION_MANAGER;
private static final CloseableHttpClient HTTP_CLIENT;
static {
SSLContext ctx = SSLContexts.createSystemDefault();
SSLConnectionSocketFactory fac =
new SSLConnectionSocketFactory(ctx, new String[]{"SSLv2Hello", "TLSv1.2"}, null, SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); HTTP_CLIENT_CONNECTION_MANAGER = new PoolingHttpClientConnectionManager(RegistryBuilder
.<ConnectionSocketFactory> create().register("http", PlainConnectionSocketFactory.getSocketFactory())
.register("https", fac).build());
HTTP_CLIENT_CONNECTION_MANAGER.setDefaultMaxPerRoute(100);
HTTP_CLIENT_CONNECTION_MANAGER.setMaxTotal(200);
RequestConfig requestConfig = RequestConfig.custom().setConnectionRequestTimeout(60000).setConnectTimeout(60000)
.setSocketTimeout(60000).build(); HTTP_CLIENT = HttpClientBuilder.create().setConnectionManager(HTTP_CLIENT_CONNECTION_MANAGER)
.setDefaultRequestConfig(requestConfig).build();
}

HttpGet httpGet = new HttpGet(url + (StringUtils.contains(url, "?") ? "&" : "?")

+ EntityUtils.toString(new UrlEncodedFormEntity(nameValuePairs, "UTF-8")));

CloseableHttpResponse httpResponse = HTTP_CLIENT.execute(httpGet);

  

希望能帮到你。。。

最新文章

  1. Java Bytecode Instructions List
  2. Ionic学习笔记四 一些问题处理
  3. 一个noconsole程序
  4. nodejs学习笔记&lt;四&gt;处理请求参数
  5. ckeditor增加上传图片的功能
  6. Hibernate关联关系之双向1—n
  7. MySQL错误代码大全
  8. Linux - 请允许我静静地后台运行
  9. wtforms快速使用和源码分析(基于flask)
  10. 云计算学习(5-1)云平台产品介绍-华为的FusionCloud产品
  11. sau交流学习社区--在element-ui中新建FormData对象组合上传图片和文件的文件对象,同时需要携带其他参数
  12. js 创建标签执行
  13. zabbix3.x添加华为(93069306)网络设备详解
  14. MyBatis实现模糊查询的几种方式
  15. CF1110H Modest Substrings AC自动机、DP
  16. asp.net上传图片文件自动修改图片大小代码
  17. sonar-scanner的执行流程和对ClassLoader,动态代理的使用
  18. 【电子基础】液晶显示器原理&#183;LCD驱动基础
  19. appium+python 【Mac】Android夜神模拟器
  20. react 使用 ref 报错 ,[eslint] Using string literals in ref attributes is deprecated. (react/no-string-refs)

热门文章

  1. SQLlite 分页
  2. struts2把表单数据封装到实体类里
  3. 接口文档神器Swagger(上篇)
  4. 在一台服务器上搭建相对高可用HiveServer实践
  5. Charles弱网测试
  6. 域适应(Domain adaptation)
  7. OCP 052最新题库还有答案收集整理-第26题
  8. 原生态js回顶部
  9. MySql数据库,对varchar类型字段str进行where str=0条件查询时,查询结果是什么
  10. 常用博客 API地址