美文网首页
Flutter 组件抓包问题

Flutter 组件抓包问题

作者: 假若我年少有为不自卑 | 来源:发表于2021-10-21 19:11 被阅读0次

问题详情: flutter 组件未进行特殊设置的情况下不会走代理,无法被抓包;

解决方案:

(1)在 dio 网络请求组件中设置代理的 ip 地址和 port,强制使用代理请求网络;


    class ProxyUtils {
      // 是否启用代理
      static bool PROXY_ENABLE = false;
      /// 代理服务IP
      static String PROXY_IP = '172.0.0.1';
      /// 代理服务端口
      static int PROXY_PORT = 8888;  
    }

    // 在调试模式下需要抓包调试,所以我们使用代理,并禁用HTTPS证书校验
    if (ProxyUtils.PROXY_ENABLE) {
      (dio.httpClientAdapter as DefaultHttpClientAdapter).onHttpClientCreate =
          (client) {
        client.findProxy = (uri) {
          var ip = ProxyUtils.PROXY_IP;
          var port = ProxyUtils.PROXY_PORT;
          return "PROXY $ip:$port";
        };
        // 代理工具会提供一个抓包的自签名证书,会通不过证书校验,所以我们禁用证书校验
        client.badCertificateCallback =
            (X509Certificate cert, String host, int port) => true;
      };
    }

(2)ipport 肯定不能通过硬编码的方式写在代码中,所以我们通过路由传值的方式将 portip 从原生传到 flutter 组件;

获取当前代理 ipport (iOS)

// 自动获取手机代理
NSString *portalBaseUrlStr = @"http://www.baidu.com";
NSDictionary *proxySettings = (__bridge NSDictionary *)(CFNetworkCopySystemProxySettings());
NSArray *proxies = (__bridge NSArray *)(CFNetworkCopyProxiesForURL((__bridge CFURLRef _Nonnull)([NSURL URLWithString:portalBaseUrlStr]), (__bridge CFDictionaryRef _Nonnull)(proxySettings)));
NSDictionary *settings = [proxies firstObject];
NSString *hostName = [NSString stringWithFormat:@"%@",settings[@"kCFProxyHostNameKey"]];
NSString *portName = [NSString stringWithFormat:@"%@",settings[@"kCFProxyPortNumberKey"]];
// 获取为空时居然是字符串"(null)"
if ([hostName isEqualToString:@"(null)"]) {
    hostName = @"";
}
if ([portName isEqualToString:@"(null)"]) {
    portName = @"";
}
NSString *proxy_ip = hostName;
NSString *proxy_port = portName;
通过路由传递 ip 和 port(iOS):

FlutterEngine *flutterEngine = [[FlutterEngine alloc] initWithName:@"io.flutter" project:nil];
        
if ([SystemInfoUtils isProxy]) {
    NSString *route = [NSString stringWithFormat:@"wallpaper?port=%@&ip=%@", [SystemInfoUtils proxy_port],[SystemInfoUtils proxy_ip]];
    [self.flutterEngine runWithEntrypoint:nil initialRoute:route];
} else {
    [self.flutterEngine runWithEntrypoint:nil];
}

flutter 接收 ipport 参数:


void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter',
      theme: ThemeData(
        primarySwatch: Colors.blue,
        primaryColor: Colors.white,
      ),
      home: _route(window.defaultRouteName),
      builder: EasyLoading.init(),
    );
  }
}

Widget _route(String url) {
  // 解析路由参数
  Uri u = Uri.parse(url);
  Map<String, String> qp = u.queryParameters;

  final port = qp["port"];
  final ip = qp["ip"];

  if (port != null && ip != null) {
    ProxyUtils.PROXY_ENABLE = true;
    ProxyUtils.PROXY_IP = ip;
    ProxyUtils.PROXY_PORT = int.parse(port);

    print("Flutter config proxy ip is $ip port is $port");
  }

  //跳转页面
  switch (u.path) {
    case 'wallpaper':
      return WallpaperViewController();
    default:
      return WallpaperViewController();
  }
}

相关文章

  • Flutter 组件抓包问题

    问题详情: flutter 组件未进行特殊设置的情况下不会走代理,无法被抓包; 解决方案: (1)在 dio 网络...

  • 抓包工具proxyman无敌

    flutter抓包(dio设置代理) iOS抓包(atlantis自动代理)都行 能直接tools -> map ...

  • flutter抓包

    前言 老项目集成flutter以后,flutter页面网络请求使用的dio框架,发现charles无法抓取请求包 ...

  • 记事本

    部分APP无法代理抓包的原因及解决方法(flutter 应用抓包) https://www.cnblogs.com...

  • Flutter iPhone 模拟器抓包

    Flutter iPhone 模拟器抓包 在 iOS 开发中,经常使用 Charles 对接口请求进行抓包操作,查...

  • Flutter抓包实践

    背景 在原生flutter混合开发项目第一次提测阶段,发现使用Charles原生端抓包正常,flutter模块却无...

  • Flutter中http请求抓包解决方案

    前言 前阵子有同学反馈Flutter中的http请求无法通过fiddler抓包,作者喜欢使用Charles抓包工具...

  • 前端发展与思考

    跨端 Flutter Web Mobile Node cli 相关 BFF + TS 相关 公共组件、npm 包 ...

  • Flutter中使用Provider底部导航进行状态管理

    本文介绍如何使用Flutter的Provider包控制BottomNavigationBar组件。什么是Provi...

  • Flutter:Dio抓包配置

    学习Flutter的一个月了,说好了写博客,才写完一篇就断更了,很尴尬。 Dio目前应该是Flutter最火的网络...

网友评论

      本文标题:Flutter 组件抓包问题

      本文链接:https://www.haomeiwen.com/subject/oncqaltx.html