12_OkHttp初体验

12_OkHttp初体验

在 Java 开发中,网络请求 是非常常见的需求。除了 Spring 自带的 RestTemplateWebClient,一个非常轻量级、性能强劲的 HTTP 客户端库就是 OkHttp

今天就来记录一下我在 Spring Boot 项目中集成并使用 OkHttp 的初体验。


📦 一、OkHttp 配置类

首先在 Spring Boot 中,我们通常会将 OkHttpClient 配置成一个 Bean,方便全局注入使用。

复制代码
/**
 * @Author: sqnugy
 * @Date: 2025/7/29 20:13
 * @Version: v1.0.0
 * @Description: OkHttp 客户端配置类
 **/
@Configuration
public class OkHttpConfig {

    @Bean
    public OkHttpClient okHttpClient(
            @Value("${okhttp.connect-timeout}") int connectTimeout,
            @Value("${okhttp.read-timeout}") int readTimeout,
            @Value("${okhttp.write-timeout}") int writeTimeout,
            @Value("${okhttp.max-idle-connections}") int maxIdleConnections,
            @Value("${okhttp.keep-alive-duration}") int keepAliveDuration) {

        return new OkHttpClient.Builder()
                .connectTimeout(connectTimeout, TimeUnit.MILLISECONDS) // 建立连接超时
                .readTimeout(readTimeout, TimeUnit.MILLISECONDS)       // 读取数据超时
                .writeTimeout(writeTimeout, TimeUnit.MILLISECONDS)     // 写入数据超时
                .connectionPool(new ConnectionPool(maxIdleConnections, keepAliveDuration, TimeUnit.MINUTES)) // 连接池配置
                .build();
    }
}

这样一来,OkHttpClient 就能作为 Spring Bean 被注入使用啦 🎉


⚙️ 二、配置文件

为了灵活性,我们把超时时间、连接池参数等写到 application.yml 中:

复制代码
okhttp: # OkHttp 客户端配置
  connect-timeout: 5000    # 建立连接的最大等待时间(毫秒)
  read-timeout: 30000      # 读取数据的最大等待时间(毫秒)
  write-timeout: 15000     # 写入数据的最大等待时间(毫秒)
  max-idle-connections: 200 # 连接池中保持的最大空闲连接数
  keep-alive-duration: 5   # 空闲连接在连接池中的存活时间(分钟)

这样后续如果需要调整参数,就不需要改代码了,非常方便。


🔍 三、OkHttp 使用示例

以一个 同步 GET 请求为例,我们来抓取指定 URL 的 HTML 内容。

复制代码
/**
 * 同步获取指定 URL 的 HTML 内容
 * @param url 请求地址
 * @return 页面 HTML 字符串
 */
private String syncFetchHtmlContent(String url) {
    // 构建 HTTP GET 请求
    Request request = new Request.Builder()
            .url(url)  
            .header("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36") // 模拟浏览器 UA
            .header("Accept", "text/html")  // 接受 HTML 格式
            .build();

    try (Response response = okHttpClient.newCall(request).execute()) {
        // 判断响应是否成功
        if (!response.isSuccessful() || response.body() == null) {
            return "";
        }
        // 返回响应内容
        return response.body().string();
    } catch (IOException e) {
        e.printStackTrace();
        return "";
    }
}

📌 四、几点感受

  • 轻量级 :相比 RestTemplate,OkHttp 使用起来更简洁,API 风格清晰。
  • 高性能:支持连接池,能复用 TCP 连接,减少资源消耗。
  • 灵活性高:可以方便地添加拦截器(例如日志、鉴权),在底层做更多定制化操作。
  • 同步 & 异步支持:既支持阻塞调用,也支持回调式异步请求。

📝 总结

第一次上手 OkHttp 给我的感受是:简单、好用、性能强

如果你的项目里有需要进行大量 HTTP 调用的场景,完全可以考虑在 Spring Boot 里集成 OkHttp。后续我也会继续探索 拦截器异步请求上传下载文件等功能。

相关推荐
allk551 天前
OkHttp源码解析(一)
android·okhttp
allk551 天前
OkHttp源码解析(二)
android·okhttp
aFakeProgramer1 天前
拆分PDF.html 办公小工具
okhttp
一壶浊酒..2 天前
ajax局部更新
前端·ajax·okhttp
洛克大航海6 天前
Ajax基本使用
java·javascript·ajax·okhttp
whltaoin12 天前
Java 网络请求 Jar 包选型指南:从基础到实战
java·http·okhttp·网络请求·retrofit
华农第一蒟蒻13 天前
谈谈跨域问题
java·后端·nginx·安全·okhttp·c5全栈
一直向钱14 天前
android 基于okhttp的socket封装
android·okhttp
linuxxx11014 天前
ajax回调钩子的使用简介
okhttp
一直向钱15 天前
android 基于okhttp 封装一个websocket管理模块,方便开发和使用
android·websocket·okhttp