轻量的 Java 网络请求框架OkHttp
主要特性
- 高性能:OkHttp 提供了连接池、透明的 gzip 压缩等特性,以提高请求的性能。
- 异步请求:支持异步 HTTP 请求,允许在后台线程中执行网络操作,不会阻塞主线程。
- 拦截器:可以添加自定义拦截器,用于日志记录、请求修改、响应处理等。
- WebSocket 支持:内置对 WebSocket 的支持,适合需要实时通信的应用场景。
- 自动重试:支持请求失败后的自动重试机制。
- 连接管理:提供了详细的连接管理功能,可以有效地管理和复用网络连接。
Maven的Pom文件中 导入依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>3.14.9</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.75</version>
</dependency>
</dependencies>
编写一个测试接口
@RequestMapping("/Json")
@ResponseBody
public JSONObject Json(@RequestBody JSONObject map) {
System.out.println(map);
map.put("success", true);
map.put("msg", UUID.randomUUID().toString());
HashMap<String, Object> stringObjectHashMap = new HashMap<>();
stringObjectHashMap.put("token", "asdascfr22rwf");
map.put("response", stringObjectHashMap);
return map;
}
编写OkHTTP的测试类发送请求这个接口
package com.example.demo.demos.web;
import com.alibaba.fastjson.JSONObject;
import okhttp3.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.util.UUID;
import java.util.concurrent.TimeUnit;
public class HttpClentTest {
private final static String httpHeaderMediaType = "application/json;charset=utf-8";
private final static String httpHeaderContentType = "Content-Type";
private final static Logger logger = LoggerFactory.getLogger(HttpClentTest.class);
private final static OkHttpClient client = new OkHttpClient.Builder()
.connectTimeout(30, TimeUnit.SECONDS)
.readTimeout(30, TimeUnit.SECONDS)
.callTimeout(30, TimeUnit.SECONDS)
.build();
public static void main(String[] args) {
JSONObject jsonBody = new JSONObject();
jsonBody.put("appKey", UUID.randomUUID().toString());
jsonBody.put("appSecret", UUID.randomUUID().toString());
RequestBody requestBody = RequestBody.create(MediaType.parse(httpHeaderMediaType), jsonBody.toJSONString());
Request request = new Request.Builder()
.addHeader(httpHeaderContentType, httpHeaderMediaType)
.addHeader("Accept", httpHeaderMediaType)
.post(requestBody)
.url("http://localhost:8282/Json")
.build();
Response signRsp = null;
try {
signRsp = client.newCall(request).execute();
if (signRsp.isSuccessful()) {
String body = signRsp.body().string();
JSONObject respBody = JSONObject.parseObject(body);
if (respBody.getBoolean("success")) {
System.out.println("===================================Token===================================");
System.out.println(respBody.getJSONObject("response").getString("token"));
} else {
logger.error("Http连接OpenapiAPi地址:openapiLoginUrl 失败,MSG= {}", respBody.getString("msg"));
}
}
} catch (IOException e) {
logger.error("Http连接OpenapiAPi地址:openapiLoginUrl 失败", e);
}
}
}
成功测试结果
===================================Token===================================
asdascfr22rwf
发送Get
public static void main(String[] args) {
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url("https://api.example.com/data?key=value")
.addHeader("Authorization", "Bearer token")
.addHeader("token", UUID.randomUUID().toString())
.build();
try (Response response = client.newCall(request).execute()) {
if (response.isSuccessful()) {
System.out.println(response.body().string());
} else {
System.err.println("Request failed: " + response.code());
}
} catch (Exception e) {
e.printStackTrace();
}
}