在实际开发过程中,我们经常需要调用对方提供的接口或测试自己写的接口是否合适。很多项目都会封装规定好本身项目的接口规范,所以大多数需要去调用对方提供的接口或第三方接口(短信、天气等)。
在Java项目中调用第三方接口的常用方式有 ①通过JDK网络类Java.net.HttpURLConnection;②通过Apache common封装好的HttpClient;③通过Apache封装好的CloseableHttpClient;④通过OkHttp;⑤通过Spring的RestTemplate;⑥通过hutool的HttpUtil。 2.Java调用第三方http接口的方式 2.1 通过JDK网络类Java.net.HttpURLConnection简介:java.net包下的原生java api提供的http请求。
使用步骤:
1、通过统一资源定位器(java.net.URL)获取连接器(java.net.URLConnection)。
2、设置请求的参数。
3、发送请求。
4、以输入流的形式获取返回内容。
5、关闭输入流。
比较原始的一种调用做法,这里把get请求和post请求都统一放在一个方法里面,直接上代码:
2.2 通过apache common封装好的HttpClient简介:http client到目前为止最新是5.1版,官网地址:http://hc.apache.org/ 。Http client专为推展而设计,同时为基本http协议提供强大支持,尽管java.net包提供了通过http访问的基本功能,但是未提供许多应用程序所需要功能。
使用步骤:
生成一个HttpClient对象并设置相应的参数;生成一个GetMethod对象或PostMethod并设置响应的参数;用HttpClient生成的对象来执行GetMethod生成的Get方法;处理响应状态码;若响应正常,处理HTTP响应内容;释放连接。无论执行方法是否成功,都必须释放连接。导入如下jar包:
代码如下:
2.3 通过Apache封装好的CloseableHttpClientCloseableHttpClient是在HttpClient的基础上修改更新而来的,这里还涉及到请求头token的设置(请求验证),利用fastjson转换请求或返回结果字符串为json格式,当然上面两种方式也是可以设置请求头token、json的,这里只在下面说明。
导入如下jar包:
代码如下:
2.4 通过OkHttp简介:OkHttp是一个默认有效的HTTP客户端,有效地执行HTTP可以加快您的负载并节省带宽,如果您的服务有多个IP地址,如果第一次连接失败,OkHttp将尝试备用地址。这对于IPv4 + IPv6和冗余数据中心中托管的服务是必需的。OkHttp启动具有现代TLS功能(SNI,ALPN)的新连接,并在握手失败时回退到TLS 1.0,OkHttp支持Android 2.3及更高版本。对于Java,最低要求是1.7。
操作步骤:
1、创建OkhttpClient。
2、mClient执行newCall将Request转化成一个Call。
3、最后call执行excute同步执行,enqueue异步执行。
4、Request主要通过Request.Builder来构建。
5、缓存。
6、取消请求。
导入如下jar包:
代码如下:
2.5 通过Spring的RestTemplateRestTemple是前三种方式的集大成者,代码编写更加简单,目前可以采用的调用第三方接口有:
delete() 在特定的URL上对资源执行HTTP DELETE操作exchange() 在URL上执行特定的HTTP方法,返回包含对象的ResponseEntity,这个对象是从响应体中映射得到的execute() 在URL上执行特定的HTTP方法,返回一个从响应体映射得到的对象getForEntity() 发送一个HTTP GET请求,返回的ResponseEntity包含了响应体所映射成的对象getForObject() 发送一个HTTP GET请求,返回的请求体将映射为一个对象postForEntity()POST 数据到一个URL,返回包含一个对象的ResponseEntity,这个对象是从响应体中映射得到的postForObject() POST 数据到一个URL,返回根据响应体匹配形成的对象headForHeaders() 发送HTTP HEAD请求,返回包含特定资源URL的HTTP头optionsForAllow() 发送HTTP OPTIONS请求,返回对特定URL的Allow头信息postForLocation() POST 数据到一个URL,返回新创建资源的URLput() PUT 资源到特定的URL注意:目前标红的为常用的
操作步骤:
1、使用默认构造方法new一个实例new RestTemplate()。
2、RestTemplate 内部通过调用 doExecute 方法,首先就是获取 ClientHttpRequest。
3、RestTemplate 实现了抽象类 HttpAccessor ,所以可以调用父类的 createRequest。
4、SimpleClientHttpRequestFactory 实现了 ClientHttpRequest,同时实现方法。
5、执行 requestCallback.doWithRequest(request)。
6、执行 response = request.execute()。
7、最后解析response。
首先导入springboot的web包
在启动类同包下创建RestTemplateConfig.java类
然后在Service类(RestTemplateToInterface )中注入使用
具体代码如下:
2.6通过hutool的HttpUtil简介:关于Hutool工具类之HttpUtil如何使用可以参考官方文档Hutool之HttpUtil。
导入如下jar包:
代码如下:
3.总结日常开发中,我们一般使用spring的resttemplate和hutool的HttpUtil偏多,特别是hutool,非常推荐,里面有很多省心的工具类。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持七叶笔记。