RestTemplate发送HTTP、HTTPS请求

前面我们介绍了如何使用Apache的HttpClient发送HTTP请求,这里我们介绍Spring的Rest客…

前面我们介绍了如何使用Apache的HttpClient发送HTTP请求,这里我们介绍Spring的Rest客户端(即:RestTemplate)
如何发送HTTP、HTTPS请求。注:
HttpClient如何发送HTTPS请求,有机会的话也会再给出示例。

声明:本人一些内容摘录自其他朋友的博客,链接在本文末给出!


基础知识

微服务都是以HTTP接口的形式暴露自身服务的,因此在调用远程服务时就必须使用HTTP客户端。我们可以使用JDK原生的URLConnectionApache的Http ClientNetty的异步HTTP Client,最方便、最优雅的Feign, Spring的RestTemplate等。

  • RestTemplate简述
    RestTemplate是Spring提供的用于访问Rest服务(Rest风格、Rest架构)的客户端。
    RestTemplate提供了多种便捷访问远程Http服务的方法,能够大大提高客户端的编写效率。

  • 调用RestTemplate的默认构造函数,RestTemplate对象在底层通过使用java.net包下的实现创建HTTP 请求;我们也可以通过使用ClientHttpRequestFactory指定不同的请求方式:

  • ClientHttpRequestFactory接口主要提供了两种实现方式:

1.常用的一种是SimpleClientHttpRequestFactory,使用J2SE提供的方式(既java.net包提供的方式)创建底层
的Http请求连接。

2.常用的另一种方式是使用HttpComponentsClientHttpRequestFactory方式,底层使用HttpClient访问远程的
Http服务,使用HttpClient可以配置连接池和证书等信息。


软硬件环境: Windows10、Eclipse、JDK1.8、SpringBoot

准备工作:引入相关依赖

HTTP之GET请求(示例)

被http请求的对应的方法逻辑为:

注:我们也可以使用@RequestHeader()来获取到请求头中的数据信息,如:

结果(效果)展示

1.进行HTTP请求的方法获得响应后输出结果为:

2.被HTTP请求的方法被请求后的输出结果为:

HTTP之POST请求(示例)

被http请求的对应的方法逻辑为:

注:我们也可以使用@RequestHeader()来获取到请求头中的数据信息,如:

结果(效果)展示

进行HTTP请求的方法获得响应后输出结果为:

被HTTP请求的方法被请求后的输出结果为:


HTTPS请求的准备工作

HTTPS请求 = 超文本传输协议HTTP + 安全套接字层SSL

先给出等下需要用到的一个SimpleClientHttpRequestFactory的实现类


HTTPS之GET请求

说明:RestTemplate发送HTTPS与发送HTTP的代码,除了在创建RestTemplate时不一样以及协议不一样
(一个URL是http开头,一个是https开头)外,其余的都一样

HTTP获取RestTemplate实例

HTTPS获取RestTemplate实例

给出具体HTTPS发送GET请求代码示例(HTTPS发送POST请求类比即可)

注:HTTPS与HTTP的使用不同之处,在途中已经圈出了。

注:上图中请求的https://tcc.taobao.com/cc/json/mobile_tel_segment.htm是阿里提供的一个简单查询手机信息的地址。

运行该主函数,控制台打印出的结果为:

注:如果用HTTP协议开头的URL去访问HTTPS开头的URL的话(这两个URL除了协议不同其它都相同),是访问不了的;除
非服务端有相应的设置。

注:发送HTTPS的逻辑代码是可以拿来发送HTTP的。但是根据我们写得HttpsClientRequestFactory类中的代码可知,会
打印出异常(异常抛出后被catch了):

如果用HTTPS访问HTTP时不想抛出异常,那么把对应的这个逻辑去掉即可。

提示:“发送HTTPS的逻辑代码是可以拿来发送HTTP的”这句话的意思是:拿来做发HTTPS请求的逻辑,可以复用来作发
HTTP请求的逻辑。并不是说说一个API能被HTTPS协议的URL访问,就一定能被HTTP协议的URL访问。

HTTPS之POST请求

注:关于HTTPS这里只给出了一个GET示例,使用HTTPS进行POST请求与HTTP进行POST请求几乎是一样的,
只是创建的RestTemplate实例和协议不一样而已,其余的都一样
;类比GET即可,这里就不再给出示例了


提示:在进行请求时,最好使用资源池管理Socket;如果每次请求都创建Socket的话,
那么一定要记得请求完毕后释放Socket,可通过将Socket定义为一个Field,使用
完毕后,进行释放。对于HPPT/HTTPS请求,本人这里其实并不推荐RestTemplate,
推荐使用HttpClientOkHttp


^_^ 如有不当之处,欢迎指正

^_^ 本文已经被收录进《程序员成长笔记(五)》,笔者JustryDeng

本文来自网络,不代表软粉网立场,转载请注明出处:https://www.rfff.net/p/4478.html

作者: HUI

发表评论

您的电子邮箱地址不会被公开。

返回顶部