如何强制Flutter应用使用HTTP而非HTTPS访问无SSL证书网站
解决方案
你的代码里有个核心问题:查询参数中的{"s":"https"}强制指定了使用HTTPS协议,这才是即便用Uri.http也无法走HTTP的根本原因。
直接修改以下两点即可解决问题:
1. 修正协议指定参数
把查询参数里的s值从https改成http,如果后端不需要这个参数,甚至可以直接移除该参数:
修改后的代码示例:
static Uri configUrl(String url){ // 提取纯净的域名,自动移除http/https前缀和/api/后缀 String baseDomain = apiConfig.api_url .replaceFirst(RegExp(r'^https?://'), '') .replaceAll('/api/', ''); // 拼接完整路径 String apiPath = '/api/$url${apiConfig.api_token}/${apiConfig.item_purchase_code}/'; // 强制使用HTTP,同时修正协议参数 var uri = Uri.http(baseDomain, apiPath, {"s":"http"}); return uri; }
如果后端的s参数是多余的,直接删掉第三个参数更简洁:
var uri = Uri.http(baseDomain, apiPath);
2. 配置平台允许HTTP请求
Flutter默认在Android 9+和iOS上会阻止明文HTTP请求,需要额外配置:
Android端
打开android/app/src/main/AndroidManifest.xml,在<application>标签中添加属性:
android:usesCleartextTraffic="true"
iOS端
打开ios/Runner/Info.plist,添加以下配置:
<key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict>
这样修改后,应用就会强制使用HTTP请求你的网站了。
内容的提问来源于stack exchange,提问作者hasanhda
相关产品推荐
相关产品推荐

