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

如何从Flutter DevTools下载.har文件或网络报告?当前无下载选项

解决Flutter DevTools无法下载网络流量报告/.har文件的问题
  • 先更新到最新版DevTools
    旧版本的Flutter DevTools确实没有导出.har的功能,先把SDK和DevTools更到最新:

    flutter upgrade
    flutter pub global activate devtools
    

    更新完重启DevTools,再去网络标签页看看有没有下载按钮。

  • 用Chrome DevTools抓包导出
    这是最靠谱的替代方法:

    1. 启动你的Flutter应用,打开DevTools后切换到「Chrome DevTools」标签
    2. 在Chrome的网络面板里完成流量捕获后,右键任意请求,选保存全部为HAR内容,直接导出.har文件
  • 代码手动导出网络日志
    要是上面的方法都用不了,就自己写个拦截器把网络请求存成HAR格式:
    比如用http包的拦截器示例:

    import 'package:http/http.dart' as http;
    import 'dart:convert';
    import 'dart:io';
    
    class HarLogger extends http.BaseClient {
      final http.Client _inner = http.Client();
    
      @override
      Future<http.StreamedResponse> send(http.BaseRequest request) async {
        // 记录请求详情
        final requestStart = DateTime.now();
        final response = await _inner.send(request);
        final responseBody = await response.stream.bytesToString();
    
        // 组装HAR格式的条目
        final harEntry = {
          'startedDateTime': requestStart.toIso8601String(),
          'request': {
            'method': request.method,
            'url': request.url.toString(),
            'headers': request.headers,
          },
          'response': {
            'status': response.statusCode,
            'headers': response.headers,
            'content': {'text': responseBody},
          },
        };
    
        // 写入HAR文件(追加模式,避免覆盖)
        final harFile = File('app_network_logs.har');
        if (await harFile.exists()) {
          final existingContent = jsonDecode(await harFile.readAsString()) as Map;
          (existingContent['log']['entries'] as List).add(harEntry);
          await harFile.writeAsString(jsonEncode(existingContent));
        } else {
          await harFile.writeAsString(jsonEncode({
            'log': {
              'version': '1.2',
              'entries': [harEntry],
            }
          }));
        }
    
        // 返回原始响应,不影响业务逻辑
        return http.StreamedResponse(
          Stream.value(utf8.encode(responseBody)),
          response.statusCode,
          headers: response.headers,
        );
      }
    }
    

    然后把http客户端换成这个拦截器:

    final client = HarLogger();
    // 正常发起请求就行,日志会自动写入文件
    await client.get(Uri.parse('https://your-api-url.com'));
    
  • 检查DevTools界面的隐藏选项
    有时候下载按钮藏在右上角的三点菜单里,或者窗口太小被挤没了,放大DevTools窗口,点击网络标签页右上角的「更多选项」(三个点),看看有没有「导出HAR」的选项。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 23:43:32