Dart HTTP Client无法接收完整响应体问题求助
修复Dart HTTP请求获取不完整JSON响应的方案
以下是针对响应体截断问题的几种排查和解决方法:
改用响应流读取完整内容
部分场景下,直接读取response.body可能因底层缓存或传输问题导致内容截断,尝试通过响应流读取全部数据:var url = Uri.https('XXX.com', 'X/X/X/X/events'); var response = await http.get(url); // 通过流读取完整响应内容 String fullBody = await response.stream.bytesToString(); Map<String, dynamic> jsonData = jsonDecode(fullBody);禁用响应压缩
服务器启用Gzip/Deflate压缩时,若客户端解压逻辑异常可能导致内容不完整。添加请求头强制服务器返回未压缩数据:var response = await http.get( url, headers: {'Accept-Encoding': 'identity'}, );模拟浏览器请求头
服务器可能对非浏览器UA的请求返回截断内容,设置与浏览器一致的User-Agent:var response = await http.get( url, headers: { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36' }, );更换HTTP客户端库
尝试使用dio库替代原生http包,它对响应处理的兼容性更强:import 'package:dio/dio.dart'; void fetchData() async { var dio = Dio(); var response = await dio.get('https://XXX.com/X/X/X/X/events'); Map<String, dynamic> jsonData = response.data; }
内容的提问来源于stack exchange,提问作者Adam A.
相关产品推荐
相关产品推荐

