调用HTTP API无响应无报错,CloudWatch无触发,求助排查解决方法
问题排查与解决方案
1. 检查应用网络权限配置
- Android端:确认
android/app/src/main/AndroidManifest.xml中已添加网络权限,且权限标签位于根层级(不要放在<application>内部):<uses-permission android:name="android.permission.INTERNET" /> - iOS端:HTTPS请求默认允许,若API有特殊证书配置,可检查
Info.plist中的ATS设置,但常规HTTPS无需额外操作。
2. 脱离Flutter手动验证API可用性
用curl命令直接测试API端点,确认请求能否正常到达:
curl -v https://918pynqzta.execute-api.ap-southeast-1.amazonaws.com/dev/getAllElderly
如果curl也无响应,说明API本身存在问题(比如未部署、路径错误、AWS区域配置错误),或你的网络到AWS的连接被防火墙/VPN阻断;如果curl能拿到响应,再回到Flutter代码排查。
3. 给请求添加超时限制
默认http包无超时设置,会导致请求无限等待。添加超时强制终止请求,触发错误便于调试:
Future<void> makeGetRequest() async { try { const url = 'https://918pynqzta.execute-api.ap-southeast-1.amazonaws.com/dev/getAllElderly'; final uri = Uri.parse(url); // 设置10秒超时 final response = await http.get(uri).timeout(const Duration(seconds: 10)); print('状态码: ${response.statusCode}'); print('响应内容: ${response.body}'); } catch (e) { print('错误详情: $e'); print('错误类型: ${e.runtimeType}'); } }
若触发超时,说明请求根本未到达API,大概率是网络层面问题。
4. 核对API Gateway配置
- 确认API已部署到指定的dev阶段,未部署的端点无法对外提供服务;
- 检查资源路径是否完全匹配
/getAllElderly,大小写、斜杠等细节不能出错; - 查看API Gateway的资源策略,确认是否设置了IP白名单限制,导致你的设备IP无法访问。
5. 增加网络调试日志
打印请求前后的关键信息,排查DNS解析、请求发起状态:
import 'package:http/http.dart' as http; import 'dart:io'; Future<void> makeGetRequest() async { try { const url = 'https://918pynqzta.execute-api.ap-southeast-1.amazonaws.com/dev/getAllElderly'; final uri = Uri.parse(url); print('开始请求: $uri'); // 打印DNS解析结果 final addresses = await InternetAddress.lookup(uri.host); print('解析到的IP: $addresses'); final response = await http.get(uri).timeout(const Duration(seconds: 10)); print('收到响应: ${response.statusCode}'); print('响应体: ${response.body}'); } catch (e) { print('错误: $e'); } }
如果DNS解析失败,说明设备无法识别AWS域名,可尝试切换DNS服务器(比如使用8.8.8.8)。
内容的提问来源于stack exchange,提问作者Matthew Lau
相关产品推荐
相关产品推荐

