Java调用第三方http接口的方式
Java调用第三方http接口的方式
-
通过JDK网络类Java.net.HttpURLConnection;
-
通过common封装好的HttpClient;
-
通过Apache封装好的CloseableHttpClient;
-
通过SpringBoot-RestTemplate;
-
通过okhttp
通过JDK网络类Java.net.HttpURLConnection
比较原始的一种调用做法,这里把get请求和post请求都统一放在一个方法里面。
实现过程:
GET:
1. 创建远程连接
2. 设置连接方式(get、post、put。。。)
3. 设置连接超时时间
4. 设置响应读取时间
5. 发起请求
6. 获取请求数据
7. 关闭连接
POST:
1. 创建远程连接
2. 设置连接方式(get、post、put。。。)
3. 设置连接超时时间
4. 设置响应读取时间
5. 当向远程服务器传送数据/写数据时,需要设置为true(setDoOutput)
6. 当前向远程服务读取数据时,设置为true,该参数可有可无(setDoInput)
7. 设置传入参数的格式:(setRequestProperty)
8. 设置鉴权信息:Authorization:(setRequestProperty)
9. 设置参数
10. 发起请求
11. 获取请求数据
12. 关闭连接
pom文件引入依赖包
通过apache common封装好的HttpClient
httpClient的get或post请求方式步骤:
1. 生成一个HttpClient对象并设置相应的参数;
2. 生成一个GetMethod对象或PostMethod并设置响应的参数;
3. 用HttpClient生成的对象来执行GetMethod生成的Get方法;
4. 处理响应状态码;
5. 若响应正常,处理HTTP响应内容;
6. 释放连接。
pom文件引入依赖包
<!--HttpClient-->
<dependency>
<groupId>commons-httpclient</groupId>
<artifactId>commons-httpclient</artifactId>
<version>3.1</version>
</dependency>
<!--fastjson-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.32</version>
</dependency>
通过Apache封装好的CloseableHttpClient
CloseableHttpClient是在HttpClient的基础上修改更新而来的,这里还涉及到请求头token的设置(请求验证),利用fastjson转换请求或返回结果字符串为json格式,当然上面两种方式也是可以设置请求头token、json的,这里只在下面说明。
pom文件引入依赖包
<!--CloseableHttpClient-->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.2</version>
</dependency>
<!--fastjson-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.32</version>
</dependency>
通过SpringBoot-RestTemplate
springBoot-RestTemple是上面三种方式的集大成者,代码编写更加简单,目前可以采用的调用第三方接口有:
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,返回新创建资源的URL
put() //PUT 资源到特定的URL
pom文件引入依赖包
<!--web服务-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
通过okhttp
okhttp 现在也是蛮流行的,基于手机端很火。
pom文件引入依赖包
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>3.10.0</version>
</dependency>
HttpClient
使用HttpClient发送请求主要分为以下几步骤:
-
创建 CloseableHttpClient对象或CloseableHttpAsyncClient对象,前者同步,后者为异步
-
创建Http请求对象
-
调用execute方法执行请求,如果是异步请求在执行之前需调用start方法
创建连接
CloseableHttpClient httpClient = HttpClientBuilder.create().build();
RequestConfig requestConfig = RequestConfig.custom()
.setSocketTimeout(60 * 1000)
.setConnectTimeout(60 * 1000).build();
String api = "/user/v1/getUserInfo";
String url = String.format("%s%s", "localhost:18080", api);
HttpGet httpGet = new HttpGet(url);
httpGet.setConfig(requestConfig); //设置超时时间
OkHttp
使用OkHttp发送请求主要分为以下几步骤:
-
创建OkHttpClient对象
-
创建Request对象
-
将Request 对象封装为Call
-
通过Call 来执行同步或异步请求,调用execute方法同步执行,调用enqueue方法异步执行
创建连接
OkHttpClient client = new OkHttpClient();
OkHttpClient client = new OkHttpClient.Builder()
.connectTimeout(60, TimeUnit.SECONDS)//设置连接超时时间
.readTimeout(60, TimeUnit.SECONDS)//设置读取超时时间
.build();
区别比较
-
OkHttp使用build模式创建对象来的更简洁一些
-
依赖包上,如果HttpClient需要发送异步请求、实现文件上传,需要额外的引入异步请求依赖
-
单例模式下,HttpClient的响应速度要更快一些,单位为毫秒,性能差异相差不大
-
非单例模式下,OkHttp的性能更好,HttpClient创建连接比较耗时,因为多数情况下这些资源都会写成单例模式。
-
OkHttp和HttpClient在性能和使用上不分伯仲,根据实际业务选择即可
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步