在项目使用https方式调用别人服务的时候,以前要写很多的代码,现在框架封装了很多,所以不用再写那么多了。

网上看了一下,都是很老的版本,用过时的DefaultHttpClient。

以spring为例:

1,在apache 4.0版本中有 DefaultHttpClient 这个类,是用来做httpsClient的,但是在4.3的时候就换成了 CloseableHttpResponse 。DefaultHttpClient 类就被标记为了 @Deprecated 。

 try(CloseableHttpResponse execute = HttpClients.createDefault().execute(new HttpGet("https://127.0.0.1:8080/demo/testApi"))) {
InputStream content = execute.getEntity().getContent();//获取返回结果 是一个InputStream
String s = IOUtils.toString(content);//把Stream转换成String
System.out.println(s);
} catch (IOException e) {
e.printStackTrace();
}

  这里采用了JDK7的新特性,语法糖,CloseableHttpResponse 继承了Closeable,Closeable又继承了 AutoCloseable。在try(){}语法后跳出{}的时候,CloseableHttpResponse 会自动调用close()方法把client关闭。所以我们不需要手动调用close()。

  如果是spring,在spring配置文件里面配置一个Bean。如果是spring boot在application内配置一个@Bean就能自动注入调用,非常方便。在ClsseableHttpClient上有 @Contract(threading = ThreadingBehavior.SAFE)注解,表明是线程安全的,所以就算是在多线程情况下也放心使用。

2,spring还有一个类可以实现,RestTemplate,也是直接配置一个Bean,进行自动注入的方式

 RestTemplate restTemplate = new RestTemplate();//可配置到spring容器管理,然后自动注入
String body = restTemplate.getForEntity("https://127.0.0.1:8080/demo/testApi", String.class).getBody();
System.out.println(body);

  getForEntity的内部调用到 doExecute()方法时,会执行ClientHttpResponse的close()方法,所以我们也不需要手动去调用close()。RestTemplate也是线程安全的类,多线程情况下也放心使用。

Java 使用 HttpClient调用https 最新源码 JDK7+ apache4.3+的更多相关文章

  1. java 通过httpclient调用https 的webapi

    java如何通过httpclient 调用采用https方式的webapi?如何验证证书.示例:https://devdata.osisoft.com/p...需要通过httpclient调用该接口, ...

  2. Java之HttpClient调用WebService接口发送短信源码实战

    摘要 Java之HttpClient调用WebService接口发送短信源码实战 一:接口文档 二:WSDL 三:HttpClient方法 HttpClient方法一 HttpClient方法二 Ht ...

  3. 转:微信开发之使用java获取签名signature(贴源码,附工程)

    微信开发之使用java获取签名signature(贴源码,附工程) 标签: 微信signature获取签名 2015-12-29 22:15 6954人阅读 评论(3) 收藏 举报  分类: 微信开发 ...

  4. 在Ubuntu上下载、编译和安装Android最新源码

    看完了前面说的几本书之后,对Linux Kernel和Android有一定的认识了,是不是心里蠢蠢欲动,想小试牛刀自己编译一把Android源码了呢?一直习惯使用Windows系统,而Android源 ...

  5. 使用 IntelliJ IDEA 导入 Spark 最新源码及编译 Spark 源代码(博主强烈推荐)

    前言   其实啊,无论你是初学者还是具备了有一定spark编程经验,都需要对spark源码足够重视起来. 本人,肺腑之己见,想要成为大数据的大牛和顶尖专家,多结合源码和操练编程. 准备工作 1.sca ...

  6. Java并发指南12:深度解读 java 线程池设计思想及源码实现

    ​深度解读 java 线程池设计思想及源码实现 转自 https://javadoop.com/2017/09/05/java-thread-pool/hmsr=toutiao.io&utm_ ...

  7. Java并发编程之CAS二源码追根溯源

    Java并发编程之CAS二源码追根溯源 在上一篇文章中,我们知道了什么是CAS以及CAS的执行流程,在本篇文章中,我们将跟着源码一步一步的查看CAS最底层实现原理. 本篇是<凯哥(凯哥Java: ...

  8. 即时通信系统中如何实现:全局系统通知,并与Web后台集成?【低调赠送:QQ高仿版GGTalk 5.1 最新源码】

    像QQ这样的即时通信软件,时不时就会从桌面的右下角弹出一个小窗口,或是显示一个广告.或是一个新闻.或是一个公告等.在这里,我们将其统称为“全局系统通知”.很多使用GGTalk的朋友都建议我加上一个类似 ...

  9. httpclient调用https

    httpclient调用https报错: Exception in thread "main" java.lang.Exception: sun.security.validato ...

随机推荐

  1. 使用Material Design 创建App翻译系列---列表和卡片集的创建

    上一篇是使用Material Design 创建App翻译系列--材料主题的使用(Using Material Theme),进入正题: 想要在应用里创建Material Design风格的复杂列表和 ...

  2. dubbo forbid 注意的几种方式

    1.检查所调用的项目模块是否起来了 2.如果起来后,检查该模块配置是否正确 3.服务端起来后与管理端的项目内容不一致(比如服务端增加了东西,管理端没有更新)

  3. js数组高阶方法reduce经典用法代码分享

    以下是个人在工作中收藏总结的一些关于javascript数组方法reduce的相关代码片段,后续遇到其他使用这个函数的场景,将会陆续添加,这里作为备忘. javascript数组那么多方法,为什么我要 ...

  4. google 访问技术

    空闲时间提供一些关于google访问的技术分享及技术支持. 不卖产品,请不要询问. 探讨技术请加群.

  5. SQL-ORDER BY 多字段排序(升序、降序)

    ORDER BY _column1, _column2; /* _column1升序,_column2升序 */   ORDER BY _column1, _column2 DESC; /* _col ...

  6. spring cloud jackson 枚举json互转 枚举json序列化/反序列化

    先定义一个枚举基类 import com.fasterxml.jackson.databind.annotation.JsonDeserialize; @JsonDeserialize(using = ...

  7. hdu 5311 Hidden String 字符串

    BC一周年的题.这道题做比赛的时候A了小数据,终于评判的时候还是挂了,看来还是不认真思考的问题啊.交的时候 都没有信心过肯定是不行的.认真思考.敲一发,有信心过才是真正的acmer.赛后认真想了想,发 ...

  8. C++实现对数学基本运算表达式的解析

    代码地址如下:http://www.demodashi.com/demo/11078.html 前段时间在LeetCode上刷题,遇到了很多涉及对字符串进行解析的题目.可能是出于这个原因,最近迷恋上了 ...

  9. Oracle查询及删除重复数据

    1.查找表中多余的重复记录,重复记录是根据单个字段(Id)来判断 ) 2.删除表中多余的重复记录,重复记录是根据单个字段(Id)来判断,只留有rowid最小的记录 ) ); 3.查找表中多余的重复记录 ...

  10. spring声明式事务以及配置

    使用spring提供的事务处理机制的好处是程序员可以不用关心事务的切面了,只要配置就好了,可以少写代码. spring声明式事务处理 spring 声明:针对的是程序员,程序员告诉spring容器,哪 ...