iOS Flutter App设置HttpOverrides.global无法用charels抓包问题

iOS flutter混合开发的app中,发现手机开启代理,flutter发起的网络请求HttpOverrides.global,无法通过代理抓包。

手机代理是通过系统的网络连接直接设置,连接配置没有错误(没有使用三方的代理app)。

flutter 网络请求关键代码设置如下:

在App启动前的初始化网络配置是,首先获取当前开发环境标志,然后获取代理地址, 最后设置HttpOverrides.global,用来达到设置全局配置,即网络连接对象Dio对象的网络代理配置,所有必要无界面流程初始化完成后才进入App主页面。

scala 复制代码
HttpOverrides.global = _HttpOverrides(systemProxy, isProduction: !BasicConfig.getInstance().appIsDebug);


class _HttpOverrides extends HttpOverrides {
  @override
  String findProxyFromEnvironment(Uri url, Map<String, String>? environment) {
    String proxy = PROXY_DIRECT;

    ///生产环境不使用代理
    if (!isProduction && systemProxy?.isNotEmpty == true) {
      proxy = "PROXY $systemProxy;$PROXY_DIRECT";
    }
    return proxy;
  }
}

代码流程也没有错误,那为什么此刻电脑charles 代理软件,没有网络请求走过来呢。

问题解决

通过开发代码flutter 网络相关初始化配置,没有发现问题。初始化顺序,app启动,main主页面加载,请求顺序都是正确的。

想到有一个IOS上的网络弹窗,在新app安装后首次启动有一个弹窗

弹窗弹出逻辑 通过测试发现,这个弹窗的弹出,是在新安装,之前没有弹出过 弹出是 手机设置了代理的情况下,因为当前项目用了自定义HttpOverrides子类实现 findProxyFromEnvironment方法,在达到了用本地网络条件的时候才会弹出一次弹窗。

修改为允许访问本地网络后,可以抓包了。并且后续通过修改这个开关设置,可以实时修改flutter网络请求是否通过charels代理。

整理了一下 app当初为什么添加了 这个字段 NSLocalNetworkUsageDescription。

NSLocalNetworkUsageDescription 使用场景

回顾一下,iOS 什么时候需要用到 NSLocalNetworkUsageDescription

苹果官方文档:developer.apple.com/documentati...

可以发现这个是iOS14新添加的权限字段。

1,在iOS app native启用一个本地http server服务的时候,需要申请这个NSLocalNetworkUsageDescription

比如我们的一个播放器sdk,为了实现边下载边播放,第二次播放从本地播放这个功能时,就APP内部启用了一个本地服务器,来实现节省流量的这一大功能。

2, 在Flutter 的官方文档中,也看到这样一个推荐的配置: flutter.cn/...

在 Info-Debug.plist 中 只 添加 key NSBonjourServices,并将它的值设置为数组 (Array),然后在该数组中添加 _dartobservatory._tcp 字符串 (String)。

可以选择添加 key NSLocalNetworkUsageDescription,并设置为你自定义的权限提示对话框文本。

那么分别来说明: NSBonjourServices 这个是 用来给flutter开发过程中, 在app使用flutter 的 attach 时,flutter 的attach需要用到这个才能 通过dns发现安装了flutter 程序的app,才可以 attach 到flutter app。

NSLocalNetworkUsageDescription 这个字段 flutte官方网页上没有注明,只是说需要添加。 那么通过本次问题发现,其实这个就是 flutter网络请求能否使用代理的一个关键配置。

综上就是这次 iOS端 Flutter App设置HttpOverrides.global无法用charels抓包问题的解决方法,并且说明了NSLocalNetworkUsageDescription字段的作用。

相关推荐
RickeyBoy11 小时前
解决 Swift Testing 中 DI 容器的竞态条件
ios
键盘鼓手苏苏11 小时前
Flutter 三方库 p2plib 的鸿蒙化适配指南 - 实现高性能的端到端(P2P)加密通讯、支持分布式节点发现与去中心化数据流传输实战
flutter·harmonyos·鸿蒙·openharmony
加农炮手Jinx11 小时前
Flutter for OpenHarmony:postgrest 直接访问 PostgreSQL 数据库的 RESTful 客户端(Supabase 核心驱动) 深度解析与鸿蒙适配指南
数据库·flutter·华为·postgresql·restful·harmonyos·鸿蒙
加农炮手Jinx11 小时前
Flutter 组件 heart 适配鸿蒙 HarmonyOS 实战:分布式心跳监控,构建全场景保活检测与链路哨兵架构
flutter·harmonyos·鸿蒙·openharmony
钛态11 小时前
Flutter 三方库 http_mock_adapter — 赋能鸿蒙应用开发的高效率网络接口 Mock 与自动化测试注入引擎(适配鸿蒙 HarmonyOS Next ohos)
android·网络协议·flutter·http·华为·中间件·harmonyos
王码码203511 小时前
Flutter for OpenHarmony:Flutter 三方库 algoliasearch 毫秒级云端搜索体验(云原生搜索引擎)
android·前端·git·flutter·搜索引擎·云原生·harmonyos
王码码203511 小时前
Flutter 三方库 dns_client 的鸿蒙化适配指南 - 告别 DNS 劫持、探索 DNS-over-HTTPS (DoH) 技术、构建安全的鸿蒙网络请求环境
flutter·harmonyos·鸿蒙·openharmony·dns_client
键盘鼓手苏苏11 小时前
Flutter 组件 highlighter 适配鸿蒙 HarmonyOS 实战:高性能语法高亮,构建大规模代码分析与文本染色架构
flutter·harmonyos·鸿蒙·openharmony
国医中兴12 小时前
Flutter 三方库 langchain_google 的鸿蒙化适配指南 - 链接 Gemini 智慧中枢、LangChain AI 实战、鸿蒙级智能应用专家
flutter·langchain·harmonyos
左手厨刀右手茼蒿12 小时前
Flutter for OpenHarmony: Flutter 三方库 shamsi_date 助力鸿蒙应用精准适配波斯历法(中东出海必备)
android·flutter·ui·华为·自动化·harmonyos