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

Flutter项目调用API遭遇SocketException连接拒绝问题求助

解决Flutter 0.3.2 Beta版本网络请求连接拒绝问题

你在使用早期Flutter版本做跨平台网络请求时遇到了连接拒绝的问题,既然已经确认了Android的网络权限,那我们可以从以下几个方向排查和修复:

1. 检查baseUrl的正确性

你的代码里用baseUrl构造请求URI,首先要确认这个常量的值是准确的jsonplaceholder.typicode.com——不要带https://前缀(Uri.https已经指定了协议),也不要在末尾加斜杠,否则会生成类似https://jsonplaceholder.typicode.com//users的错误URL,直接导致连接失败。

比如你的constants.dart里应该是:

const String baseUrl = 'jsonplaceholder.typicode.com';

2. 配置iOS的ATS(App Transport Security)

在较老的iOS版本或Flutter版本中,ATS可能会严格限制HTTPS连接的安全性(哪怕目标是合法的HTTPS地址)。你需要在iOS项目的Info.plist文件中添加ATS例外配置:

打开ios/Runner/Info.plist,添加以下内容:

<key>NSAppTransportSecurity</key>
<dict>
  <key>NSAllowsArbitraryLoads</key>
  <true/>
</dict>

注:这是测试场景的快速解决方法,正式发布时建议针对特定域名配置更严格的ATS规则。

3. 排查代理或网络环境问题

如果你的设备/模拟器处于代理环境下(比如电脑开了VPN、Charles等抓包工具),可能会导致Flutter的HttpClient无法正常连接目标服务器。试试关闭代理工具,或者切换到手机自身的移动网络测试请求。

如果需要保留代理,可以给HttpClient手动配置代理:

httpClient.findProxy = (uri) {
  return "PROXY your-proxy-ip:port";
};

4. 改用官方http包替代原生HttpClient

Flutter早期版本的HttpClient可能存在兼容性问题,换成官方维护的http包会更稳定。步骤如下:

  • 在pubspec.yaml中添加依赖:
    dependencies:
      http: ^0.12.0+2 # 适配Flutter 0.3.2的版本,可根据实际调整
    
  • 修改你的请求代码:
    import 'package:http/http.dart' as http;
    import 'dart:convert';
    
    Future<List<User>> retrieve() async {
      final response = await http.get('https://jsonplaceholder.typicode.com/users');
      if (response.statusCode == 200) {
        List userMap = json.decode(response.body);
        return userMap.map((jsonUser) => User.fromJson(jsonUser)).toList();
      } else {
        throw Exception('Failed to load users');
      }
    }
    

5. 验证URL的可访问性

先在浏览器或终端用curl命令测试目标URL是否能正常返回数据:

curl https://jsonplaceholder.typicode.com/users

如果这个命令也失败,那可能是你的网络本身无法访问该域名,需要排查网络连通性;如果能正常返回,再回到Flutter代码中调试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 03:59:25