news 2026/5/27 13:05:01

OkHttp 服务端开发完全指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
OkHttp 服务端开发完全指南

OkHttp本身是客户端库(用于发送 HTTP 请求),没有内置服务端功能,但官方提供了配套的mockwebserver库,专门用于搭建轻量级 HTTP 服务端(测试服务、Mock 接口、本地代理服务都适用)。

这是 Java/Android 生态最常用的轻量级 HTTP 服务端方案,完美兼容 OkHttp 生态。


一、核心依赖

Maven

xml

<dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId>mockwebserver</artifactId> <version>4.12.0</version> </dependency>

Gradle

gradle

implementation 'com.squareup.okhttp3:mockwebserver:4.12.0'

二、快速入门:最简服务端

直接启动一个 HTTP 服务,返回固定响应:

java

运行

import okhttp3.mockwebserver.MockResponse; import okhttp3.mockwebserver.MockWebServer; import java.io.IOException; public class SimpleServer { public static void main(String[] args) throws IOException { // 1. 创建服务端实例 MockWebServer server = new MockWebServer(); // 2. 设置响应(预设返回结果) server.enqueue(new MockResponse() .setBody("{"msg":"Hello OkHttp Server"}") // 响应体 .setResponseCode(200) // 状态码 .addHeader("Content-Type", "application/json")); // 请求头 // 3. 启动服务(指定端口,传0则自动分配) server.start(8080); System.out.println("服务启动成功:http://localhost:" + server.getPort()); // 服务会一直运行,直到手动关闭 // server.close(); // 关闭服务 } }

启动后访问:http://localhost:8080即可得到 JSON 响应。


三、进阶用法:动态处理请求(核心)

实际开发中,服务端需要根据请求路径、参数、方法动态返回不同结果,这是最常用的场景:

java

运行

import okhttp3.mockwebserver.*; import okhttp3.Headers; import java.io.IOException; import java.nio.charset.StandardCharsets; public class DynamicServer { public static void main(String[] args) throws IOException { MockWebServer server = new MockWebServer(); // 自定义请求分发器(核心:动态处理所有请求) server.setDispatcher(new Dispatcher() { @Override public MockResponse dispatch(RecordedRequest request) { // 获取请求信息 String path = request.getPath(); // 请求路径 /user String method = request.getMethod(); // 请求方法 GET/POST String body = request.getBody().readString(StandardCharsets.UTF_8); // 请求体 Headers headers = request.getHeaders(); // 请求头 // 根据路径动态响应 return switch (path) { case "/api/user" -> new MockResponse() .setBody("{"name":"OkHttp服务端","age":20}") .setHeader("Content-Type", "application/json"); case "/api/hello" -> new MockResponse() .setBody("你好,动态响应!") .setResponseCode(200); // 404 不存在的接口 default -> new MockResponse().setResponseCode(404).setBody("接口不存在"); }; } }); // 启动服务 server.start(8080); System.out.println("动态服务启动:http://localhost:8080"); } }

支持的核心功能

  1. 获取请求路径、方法、请求头、请求体、参数
  2. 自定义响应状态码、响应头、响应体、响应延迟
  3. 支持GET/POST/PUT/DELETE所有 HTTP 方法

四、常用高级配置

1. 模拟网络延迟(测试超时场景)

java

运行

new MockResponse() .setBody("响应数据") .setBodyDelay(1, TimeUnit.SECONDS); // 延迟1秒返回

2. 模拟错误响应

java

运行

new MockResponse().setResponseCode(500).setBody("服务器内部错误");

3. 获取客户端请求日志(调试用)

java

运行

// 取出请求记录(阻塞式,必须有请求才会返回) RecordedRequest request = server.takeRequest(); System.out.println("请求路径:" + request.getPath()); System.out.println("请求方法:" + request.getMethod());

4. 长连接 / 保持服务运行

MockWebServer启动后会独立线程运行,无需手动阻塞主线程,适合长期运行的轻量服务。


五、适用场景

✅ 单元测试 / 接口测试 Mock 服务 ✅ 前端开发本地模拟接口 ✅ Android/iOS 调试用本地服务 ✅ 轻量级内部工具服务

❌ 不适合:高并发生产环境服务端(请用 SpringBoot/Tomcat/Netty)


六、完整关闭服务

java

运行

// 优雅关闭 Runtime.getRuntime().addShutdownHook(new Thread(() -> { try { server.close(); System.out.println("服务已关闭"); } catch (IOException e) { e.printStackTrace(); } }));

总结

  1. OkHttp = 客户端MockWebServer = 配套轻量级服务端
  2. 核心类:MockWebServer(服务)、Dispatcher(动态分发)、MockResponse(响应)、RecordedRequest(请求)
  3. 开箱即用、无需配置、代码极简,适合测试 / 本地开发场景
  4. 生产环境请使用专业 Web 框架(SpringBoot、Netty 等)
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/27 13:01:47

关于用flex弹性盒子修饰网页

一.flex盒子的概念&#xff1a;1.容器与项目&#xff1a;在网页中采用flex布局的元素称为flex容器&#xff0c;该容器的内部元素称为flex项目&#xff1b;通过 display&#xff1a; flex 可以将元素强制转换为 Flex 容器。2.在flex容器中有两根轴&#xff08;主轴&#xff0c;交…

作者头像 李华
网站建设 2026/5/27 12:49:00

小型轧机选型指南:专业机构如何精准匹配

在冶金行业&#xff0c;小型轧机的选型直接关系到生产效率、产品质量和投资回报。不少企业因选型不当&#xff0c;导致设备利用率低、维护成本高&#xff0c;甚至不得不二次投资。本文结合行业数据和实际案例&#xff0c;分享如何通过科学方法精准匹配小型轧机&#xff0c;助你…

作者头像 李华
网站建设 2026/5/27 12:48:59

Prism Launcher:当Minecraft遇见开源哲学的完美融合

Prism Launcher&#xff1a;当Minecraft遇见开源哲学的完美融合 【免费下载链接】PrismLauncher A custom launcher for Minecraft that allows you to easily manage multiple installations of Minecraft at once (Fork of MultiMC) 项目地址: https://gitcode.com/gh_mirr…

作者头像 李华
网站建设 2026/5/27 12:47:11

基于布尔函数优化的FPGA模运算单元设计:从算术到逻辑的范式转换

1. 项目概述模运算&#xff0c;也就是我们常说的取模操作&#xff0c;是数字电路和计算系统里一个绕不开的基础运算。从密码学里的RSA、ECC算法&#xff0c;到数字信号处理中的滤波器设计&#xff0c;再到新兴的余数系统&#xff08;RNS&#xff09;计算架构&#xff0c;它的身…

作者头像 李华