Flutter项目中Dart http包请求无响应问题排查
http.get请求阻塞无返回,仅在家中网络环境出现异常
问题代码
Future<Widget> getDog() async{ var res = await http.get(Uri(scheme: "https", host:"random.dog", path:"/woof.json" )); print(res.statusCode); if(res.statusCode != 200) throw Exception(); return Image.network(jsonDecode(res.body)["url"]); }
问题描述
- 上述函数中
http.get突然失效,线程陷入阻塞,print语句从未执行,无任何返回结果 - 旧项目中也出现相同问题
- 已确认函数被正常调用(调试断点触发),尝试过以下操作但无效:
- 在AndroidManifest中添加网络权限
- 执行
flutter doctor -v无报错 - 执行
flutter packages get
- 补充:仅在家中环境运行出现问题,学校环境下可正常工作,怀疑是网络问题导致?
排查与解决建议
1. 直接验证网络连通性
用浏览器访问https://random.dog/woof.json,如果浏览器也无法加载,说明家中网络对该域名存在访问限制——可能是DNS解析失败、运营商域名屏蔽、路由器防火墙拦截。
2. 切换网络环境测试
将设备从家中WiFi切换到手机热点,若请求恢复正常,即可确认是当前WiFi网络的问题。
3. 添加请求超时配置
当前代码未设置超时,网络阻塞时会无限等待。给http.get添加超时,可明确捕获异常:
var res = await http.get(Uri(scheme: "https", host:"random.dog", path:"/woof.json")) .timeout(const Duration(seconds: 10), onTimeout: () { throw TimeoutException('请求超时'); });
4. 检查DNS解析
在终端执行ping random.dog或nslookup random.dog,查看是否能正常解析到IP地址。若解析失败,手动更换DNS服务器(如8.8.8.8或114.114.114.114)后重新测试。
5. 排查防火墙与代理
检查家中路由器是否开启域名过滤、防火墙规则,是否屏蔽了random.dog;同时确认本地是否开启代理软件,代理配置异常也会导致请求阻塞。
内容的提问来源于stack exchange,提问作者Konoko_kun
相关产品推荐
相关产品推荐

