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发送请求主要分为以下几步骤:

  1. 创建 CloseableHttpClient对象或CloseableHttpAsyncClient对象,前者同步,后者为异步

  2. 创建Http请求对象

  3. 调用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发送请求主要分为以下几步骤:

  1. 创建OkHttpClient对象

  2. 创建Request对象

  3. 将Request 对象封装为Call

  4. 通过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在性能和使用上不分伯仲,根据实际业务选择即可

posted @ 2022-09-21 09:06  盗梦笔记  阅读(460)  评论(0编辑  收藏  举报