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

为什么Flutter调用API报SocketException连接被拒但Postman、网页端可正常访问?

SocketException: Connection refused, errno = 111 属于TCP连接建立失败错误,请求还没到达HTTP协议处理层,因此你确认的请求头、请求体、Cookie参数正确不影响该问题的定位,按以下优先级排查:

1. 优先排查运行设备网络连通性

  • 若使用Android模拟器调试:Android模拟器存在网络隔离,默认无法直接访问宿主机的10.0.0.0/8网段地址,你配置的10.0.0.25是宿主机IP的话,需将baseUrl改为模拟器默认宿主机映射地址10.0.2.2,同时确认后端服务绑定的是0.0.0.0而非127.0.0.1,绑定回环地址的话仅宿主机自身可访问。
  • 若使用真机调试:确保手机与后端服务所在设备连接同一WiFi,关闭路由器AP隔离功能,且手机可以通过浏览器直接访问API地址验证连通性。

2. 检查Android端网络权限配置

  • 确认Flutter项目Android目录下的AndroidManifest.xml已配置网络权限:
<!-- 必须添加的网络访问权限 -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
  • 若你的API是HTTP明文协议,Android 9及以上系统默认禁止明文请求,需在application标签中添加配置:
<application
    ...
    android:usesCleartextTraffic="true">

3. 核对Dio实例配置

  • 检查你通过服务定位器注入的Dio实例的baseUrl配置,确认端口、路径前缀与Postman调用的完全一致,未出现拼写错误。
  • 确认Dio实例未配置无效的代理规则,若之前为了抓包配置过Fiddler/Charles代理,代理未开启时会触发连接拒绝错误。
  • 建议补充Dio的超时配置:
BaseOptions options = BaseOptions(
  baseUrl: "你的API地址",
  connectTimeout: Duration(seconds: 10),
  receiveTimeout: Duration(seconds: 10),
);
Dio dio = Dio(options);

4. 排查本地防火墙限制

临时关闭后端服务所在设备的防火墙、安全防护软件,再次尝试请求,确认是否为防火墙拦截了端口访问。


额外注意

你提供的响应模型代码存在命名不一致问题,类名是LoginResponsev3,但构造函数、序列化方法命名都是LoginResponse,接口连通后会触发序列化失败错误,需修正命名保持一致。

内容的提问来源于stack exchange,提问作者Dan Anderson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 21:15:04