Flutter App iOS模拟器设置透明代理

时间:2018-06-20 13:53:21

标签: dart ios-simulator flutter

我需要通过本地代理localhost:3128运行Flutter应用程序发出的每个网络请求。此代理是在我的系统中全局设置的,iOS Simulator可以选择设置(即在Simulator上使用Safari可以正常工作)。如果我像这样明确指定代理,则Flutter应用程序的网络连接可以正常工作:

HttpClient client = HttpClient();
client.findProxy = (uri) {
  return "PROXY localhost:3128;";
};
....

但是,我自然不能使用基于HttpClient的抽象,也不公开诸如NetworkImage之类的手动设置代理的方法。

是否有一种方法可以针对我的开发目的为应用程序中使用的所有HttpClient全局设置代理?另外,在iOS模拟器中设置适当的环境变量的最佳方法是什么,以便findProxyFromEnvironment选择正确的环境变量?最后,有没有一种方法可以使iOS模拟器中的代理透明化?

1 个答案:

答案 0 :(得分:0)

您可以使用HttpOverrides.global拥有一个拦截器,该拦截器可在实例化时用于创建HTTP客户端。

  class MyHttpOverrides extends HttpOverrides {
  @override
  HttpClient createHttpClient(SecurityContext context) {
     return super.createHttpClient(context)
       ..findProxy = (uri) {
         return "PROXY localhost:3128;";
       }
       ..badCertificateCallback =
         (X509Certificate cert, String host, int port) => true;
   }
}

void main() {
  HttpOverrides.global = new MyHttpOverrides();
  runApp(MyApp());
}