如何从Flutter DevTools下载.har文件或网络报告?当前无下载选项
解决Flutter DevTools无法下载网络流量报告/.har文件的问题
先更新到最新版DevTools
旧版本的Flutter DevTools确实没有导出.har的功能,先把SDK和DevTools更到最新:flutter upgrade flutter pub global activate devtools更新完重启DevTools,再去网络标签页看看有没有下载按钮。
用Chrome DevTools抓包导出
这是最靠谱的替代方法:- 启动你的Flutter应用,打开DevTools后切换到「Chrome DevTools」标签
- 在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
相关产品推荐
相关产品推荐

