Flutter無法抓包?教你如何利用Eventchannel設(shè)置代理岭参。

當(dāng)前Flutter內(nèi)的請求數(shù)據(jù)都無法直接利用抓包工具直接抓取反惕,對測試造成了十分嚴(yán)重的困擾。下面說說如何解決Flutter模塊無法抓包這個問題演侯。

解決思路是這樣的:基于Flutter自帶的網(wǎng)絡(luò)框架與原生的網(wǎng)絡(luò)框架不通姿染,設(shè)置網(wǎng)絡(luò)代理時只能檢測到原生的網(wǎng)絡(luò),那么我們可以主動為Flutter網(wǎng)絡(luò)框架設(shè)置對應(yīng)的代理地址以獲取網(wǎng)絡(luò)請求數(shù)據(jù)秒际。

那么我們需要Native主動為Flutter端提供代理的地址悬赏。為此我們采用EventChannel的方式來傳遞兩端數(shù)據(jù)狡汉。

Native端

以iOS端為例:我們構(gòu)建一個UIAlertController用以輸入代理地址:
在Appdelegate里設(shè)置延遲2s執(zhí)行,保證flutter引擎已經(jīng)初始化闽颇。

    #ifdef DEBUG
        //延時處理盾戴,立即處理的話,引擎還沒有初始化完成
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 2*NSEC_PER_SEC),dispatch_get_main_queue(), ^{
            [self showFlutterDelegateAlertController];
        });
    #else
    #endif

彈框代碼:

//設(shè)置Flutter代理彈框
- (void)showFlutterDelegateAlertController {
    UIAlertController *alertController = [UIAlertController alertControllerWithTitle:nil message:@"輸入代理" preferredStyle:UIAlertControllerStyleAlert];
   //增加取消按鈕兵多;
   [alertController addAction:[UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
   }]];
   //增加確定按鈕尖啡;
   [alertController addAction:[UIAlertAction actionWithTitle:@"確定" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
       //獲取第1個輸入框;
       UITextField *delegateField = alertController.textFields.firstObject;
       if (delegateField.text.length>0){
            //一下代碼為調(diào)取flutter端代碼
           [PlatformRouterImp sharedRouter].nativeCallFlutterEventSink(delegateField.text);
       }
   }]];
   //定義第一個輸入框中鼠;
   [alertController addTextFieldWithConfigurationHandler:^(UITextField * _Nonnull textField) {
       textField.placeholder = @"(測試抓包專用可婶,不用輸端口)";
   }];
   [self.window.rootViewController presentViewController:alertController animated:true completion:nil];
}

PlatformRouterImp為自己封裝的一個兩端通信的類。只需設(shè)置FlutterViewController時先為其設(shè)置Eventchannel通道

- (void)setupNativeCallFlutter {
    if (!self.flutterViewController) return;
    // 用于Native調(diào)用Flutter
    FlutterEventChannel *nativeCallFlutterChannel = [FlutterEventChannel eventChannelWithName:NativeCallFlutter binaryMessenger:self.flutterViewController];
    [nativeCallFlutterChannel setStreamHandler:self];
}

設(shè)置完通道后設(shè)置數(shù)據(jù)監(jiān)聽函數(shù)

- (FlutterError *)onListenWithArguments:(id)arguments eventSink:(FlutterEventSink)events
{
    self.nativeCallFlutterEventSink = events;
    return nil;
}
- (FlutterError*)onCancelWithArguments:(id)arguments {
    //[[NSNotificationCenter defaultCenter] removeObserver:self];
    NSLog(@"停止發(fā)送數(shù)據(jù)");
    return nil;
}

Flutter端

在main函數(shù)里監(jiān)聽EventChannel數(shù)據(jù)流

  static const EventChannel eventChannel =
  EventChannel('samples.flutter.dev/nativeCallFlutter');

  @override
  void initState() {
    super.initState();

    eventChannel.receiveBroadcastStream().listen(_onEnvent, onError: _onError);
  }

為網(wǎng)絡(luò)框架設(shè)置代理地址援雇,這里以dio為例

void _onEnvent(Object obj) {
    setState(() {
      print('接收到eventChannel:$obj');
      //TODO:設(shè)置dio代理
      Http2Client _client = Http2Client.getInstance();
      (_client.getDio().httpClientAdapter as DefaultHttpClientAdapter)
          .onHttpClientCreate = (HttpClient client) {
        client.findProxy = (uri) {
          //proxy all request to localhost:8888
          print('設(shè)置了代理:PROXY $obj:8888');
          return "PROXY $obj:8888";
        };
        client.badCertificateCallback =
            (X509Certificate cert, String host, int port) => true;
      };
    });
  }

  void _onError(Object obj) {
    print('失斆省:$obj');
  }

至此,可在原生界面為Flutter端設(shè)置網(wǎng)絡(luò)代理里惫搏。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
禁止轉(zhuǎn)載具温,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者。
  • 序言:七十年代末筐赔,一起剝皮案震驚了整個濱河市铣猩,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌茴丰,老刑警劉巖达皿,帶你破解...
    沈念sama閱讀 222,627評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異贿肩,居然都是意外死亡峦椰,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,180評論 3 399
  • 文/潘曉璐 我一進店門汰规,熙熙樓的掌柜王于貴愁眉苦臉地迎上來汤功,“玉大人,你說我怎么就攤上這事溜哮√辖穑” “怎么了?”我有些...
    開封第一講書人閱讀 169,346評論 0 362
  • 文/不壞的土叔 我叫張陵茂嗓,是天一觀的道長餐茵。 經(jīng)常有香客問我,道長述吸,這世上最難降的妖魔是什么忿族? 我笑而不...
    開封第一講書人閱讀 60,097評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上肠阱,老公的妹妹穿的比我還像新娘。我一直安慰自己朴读,他們只是感情好屹徘,可當(dāng)我...
    茶點故事閱讀 69,100評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著衅金,像睡著了一般噪伊。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上氮唯,一...
    開封第一講書人閱讀 52,696評論 1 312
  • 那天鉴吹,我揣著相機與錄音,去河邊找鬼惩琉。 笑死豆励,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的瞒渠。 我是一名探鬼主播良蒸,決...
    沈念sama閱讀 41,165評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼伍玖!你這毒婦竟也來了嫩痰?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,108評論 0 277
  • 序言:老撾萬榮一對情侶失蹤窍箍,失蹤者是張志新(化名)和其女友劉穎串纺,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體椰棘,經(jīng)...
    沈念sama閱讀 46,646評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡纺棺,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,709評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了晰搀。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片五辽。...
    茶點故事閱讀 40,861評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖外恕,靈堂內(nèi)的尸體忽然破棺而出杆逗,到底是詐尸還是另有隱情,我是刑警寧澤鳞疲,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布罪郊,位于F島的核電站,受9級特大地震影響尚洽,放射性物質(zhì)發(fā)生泄漏悔橄。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,196評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望癣疟。 院中可真熱鬧挣柬,春花似錦、人聲如沸睛挚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,698評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽扎狱。三九已至侧到,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間淤击,已是汗流浹背匠抗。 一陣腳步聲響...
    開封第一講書人閱讀 33,804評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留污抬,地道東北人汞贸。 一個月前我還...
    沈念sama閱讀 49,287評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像壕吹,于是被迫代替她去往敵國和親著蛙。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,860評論 2 361