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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 01:40:04