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。后续我也会继续探索 拦截器异步请求上传下载文件等功能。

相关推荐
小白学大数据1 分钟前
Python 自动化爬取网易云音乐歌手歌词实战教程
爬虫·python·okhttp·自动化
前端百草阁2 天前
【吃透 Promise】从基础到面试高频(手写 + 输出题 + 原理)
okhttp·面试·职场和发展
ppandss13 天前
JavaWeb从0到1-DAY4-AJAX
前端·ajax·okhttp
4311媒体网7 天前
织梦CMS点击率统计实现方法
okhttp
帅次8 天前
链路到端上:HTTPS 之后安全题还在考什么
android·okhttp·glide·zygote·retrofit
djk88889 天前
layui zTree 控件 AJAX绑定 点击tree事件 获取tree值
ajax·okhttp·layui
明天就是Friday11 天前
Android实战项目④ OkHttp WebSocket开发即时通讯App 完整源码详解
android·websocket·okhttp
xiangxiongfly91511 天前
Android 使用WebSocket通信
android·websocket·网络协议·okhttp
研☆香13 天前
聊聊什么是AJAX
前端·ajax·okhttp
sunwenjian88614 天前
跨域问题解释及前后端解决方案(SpringBoot)
spring boot·后端·okhttp