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

Flutter无法请求AWS EC2集成环境端点的问题解决

问题根因

请求执行到await位置直接中断、后续代码不执行,是两个问题共同导致:

  • 代码未做异常捕获,网络类异常被直接静默吞掉,没有任何错误输出
  • Android、iOS系统默认拦截非白名单域名的明文HTTP请求,生产域名www.test.com已经在原生配置的白名单内,AWS EC2默认分配的域名不在白名单中,因此被系统直接拦截。这和已验证的现象完全匹配:Postman不受移动端系统网络规则限制可以正常访问,换白名单内的生产域名Flutter请求正常。
解决步骤

1. 先补全异常捕获拿到明确错误

现有代码没有异常处理,请求抛出错误后会直接跳出函数,不会有任何提示。先修改代码加上try/catch:

Future getCode() async {
  try {
    Response response = await client.get(
      Uri.parse('http://ec2-54-202-27-94.sa-east-1.compute.amazonaws.com/test/api/v1/example'),
    );
    print(response.statusCode);
  } catch (e) {
    print("请求报错: $e");
  }
}

运行后如果打印出CLEARTEXT communication not permitted这类明文流量限制的错误,直接按下面的平台配置修改即可。

2. 配置平台网络白名单

注意:以下配置仅适用于测试环境,正式上线不建议开放明文HTTP权限。

Android端配置

找到项目路径下android/app/src/main/AndroidManifest.xml文件:

  • 简单测试可以直接在<application>标签添加属性android:usesCleartextTraffic="true",全局放开明文HTTP请求:
<application
        android:label="你的应用名称"
        android:icon="@mipmap/ic_launcher"
        android:usesCleartextTraffic="true">
    <!-- 其余原有配置保持不变 -->
</application>
  • 如果要做精细化权限控制,只放开指定域名的明文访问,先新建文件android/app/src/main/res/xml/network_security_config.xml:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">ec2-54-202-27-94.sa-east-1.compute.amazonaws.com</domain>
        <domain includeSubdomains="true">www.test.com</domain>
    </domain-config>
</network-security-config>

再在AndroidManifest.xml的application标签下添加属性引用该配置:
android:networkSecurityConfig="@xml/network_security_config"

iOS端配置

找到项目路径下ios/Runner/Info.plist文件,在NSAppTransportSecurity配置段下添加EC2域名的访问例外:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>ec2-54-202-27-94.sa-east-1.compute.amazonaws.com</key>
        <dict>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <key>NSIncludesSubdomains</key>
            <true/>
        </dict>
        <key>www.test.com</key>
        <dict>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
        </dict>
    </dict>
</dict>

注意:修改完原生配置后,必须完全卸载手机/模拟器上的现有应用,重新执行flutter run编译安装,热重载、热重启都不会加载原生配置改动,会导致配置不生效。

长期方案

正式环境建议给EC2实例绑定SSL证书,将接口切换为HTTPS协议,不需要额外配置平台白名单,也符合各大应用商店的上架审核规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 16:09:22