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

Flutter中使用Retrofit发起API调用时如何查看请求及请求体

Flutter Retrofit 打印完整请求URL与请求体方案

Flutter 版 Retrofit 底层网络能力由 Dio 提供,无需修改 Retrofit 接口定义,直接给 Dio 实例配置内置日志拦截器即可拿到所有需要的请求信息。

  • 基础配置
    初始化 Dio 时添加LogInterceptor,无需额外引入第三方依赖,参考代码:
    import 'package:dio/dio.dart';
    import 'package:flutter/foundation.dart';
    
    final dio = Dio(
      BaseOptions(
        baseUrl: "填写你项目的baseApi地址",
        connectTimeout: const Duration(seconds: 10),
        receiveTimeout: const Duration(seconds: 10),
      )
    );
    
    void setupNetwork() {
      // 仅debug环境加载日志拦截器,避免release环境泄露接口信息
      if (kDebugMode) {
        dio.interceptors.add(
          LogInterceptor(
            request: true,
            requestHeader: false,
            requestBody: true, // 开启后打印完整请求体
            responseHeader: false,
            responseBody: true,
            logPrint: (logContent) => debugPrint(logContent.toString()),
          ),
        );
      }
      // 把配置好的dio传入Retrofit生成的服务类即可
      // final apiClient = ApiClient(dio);
    }
    
  • 日志字段说明
    配置完成后发起请求,控制台输出日志里:
    • uri 字段就是 baseUrl 拼接路由、拼接所有query参数后的完整请求地址
    • data 字段就是最终发出的完整request body,JSON、FormData等格式都能完整打印
  • 避坑点
    • 如果你有自定义拦截器(比如注入token、拼接公共参数、加签),一定要把LogInterceptor加到拦截器列表的最后,这样打印的是经过所有拦截器处理后的真实请求内容,不会漏拦截器追加的字段
    • 不要用print输出日志,长内容会被控制台截断,用debugPrint会自动分片输出,保证日志完整
    • 加kDebugMode判断后,release包不会加载日志拦截器,不会有信息泄露风险

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 22:51:07