You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

http_interceptor是否支持直接返回客户端响应而不请求服务器?

使用http_interceptor实现本地Mock响应(绕过服务器请求)

http_interceptor完全支持这种本地Mock响应、绕过服务器请求的需求,核心思路是通过自定义拦截器,在请求阶段直接返回构造好的响应数据,终止后续的请求发送流程。

实现步骤与代码示例

  1. 自定义Mock拦截器
    继承InterceptorContract,重写interceptRequest方法,通过抛出HttpResponseException并携带自定义的ResponseData来直接返回Mock响应:
import 'package:http_interceptor/http_interceptor.dart';

class MockInterceptor extends InterceptorContract {
  @override
  Future<RequestData> interceptRequest({required RequestData data}) async {
    // 构造Mock响应,直接终止请求链
    throw HttpResponseException(
      ResponseData(
        data: {'message': 'Mock response'},
        statusCode: 200,
        headers: {},
      ),
    );
  }

  @override
  Future<ResponseData> interceptResponse({required ResponseData data}) async {
    // 响应拦截无需修改,直接返回原数据
    return data;
  }
}
  1. 配置并使用拦截器
    通过HttpWithInterceptor.build创建带有Mock拦截器的HTTP客户端,发起请求时会直接返回Mock响应:
final httpClient = HttpWithInterceptor.build(
  interceptors: [MockInterceptor()],
  baseUrl: 'https://your-base-domain.com',
);

// 发起请求示例
try {
  final response = await httpClient.get('/test-endpoint');
} on HttpResponseException catch (e) {
  // 获取Mock响应数据
  final mockResponse = e.response;
  print(mockResponse.data); // 输出: {'message': 'Mock response'}
  print(mockResponse.statusCode); // 输出: 200
}

针对特定接口返回不同Mock数据

如果需要根据请求路径、方法或参数返回不同的Mock响应,可以在interceptRequest中添加判断逻辑:

@override
Future<RequestData> interceptRequest({required RequestData data}) async {
  // 根据请求路径返回对应Mock数据
  switch (data.url.path) {
    case '/user/profile':
      throw HttpResponseException(
        ResponseData(
          data: {'id': 101, 'username': 'mock_user', 'email': 'mock@example.com'},
          statusCode: 200,
          headers: {},
        ),
      );
    case '/posts':
      throw HttpResponseException(
        ResponseData(
          data: [
            {'id': 1, 'title': 'First Mock Post', 'content': 'Mock content here'},
            {'id': 2, 'title': 'Second Mock Post', 'content': 'Another mock content'}
          ],
          statusCode: 200,
          headers: {},
        ),
      );
    default:
      // 未匹配的请求继续发送到服务器(可选,也可以统一返回默认Mock)
      return data;
  }
}

原理说明

通过在请求拦截阶段抛出HttpResponseException,http_interceptor会终止后续的请求发送流程,直接将异常中携带的ResponseData作为请求结果返回,从而完全绕过服务器,实现客户端本地Mock响应的效果,和你提供的Dio实现逻辑一致,只是API形式略有不同。

内容的提问来源于stack exchange,提问作者krishnaji

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 02:30:26