Flutter抓包實(shí)踐

背景

在原生flutter混合開(kāi)發(fā)項(xiàng)目第一次提測(cè)階段局嘁,發(fā)現(xiàn)使用Charles原生端抓包正常,flutter模塊卻無(wú)法抓包悦昵。通過(guò)查閱文章發(fā)現(xiàn)flutter使用Dio庫(kù)進(jìn)行網(wǎng)絡(luò)請(qǐng)求時(shí),默認(rèn)情況下是不走手機(jī)代理的寡痰,想要抓包需要通過(guò)代碼去配置代理en~~~~~~

實(shí)現(xiàn)方案

本來(lái)想到兩種方案:

第一種:在flutter端通過(guò)彈框輸入IP和端口號(hào)棋凳,這樣可以省去iOS和Android兩端的處理,但是抓包時(shí)剩岳,既需要給手機(jī)配置代理拍棕,又需要在APP上輸入代理,對(duì)測(cè)試人員來(lái)說(shuō)绰播,操作太過(guò)麻煩。

第二種:APP啟動(dòng)時(shí)蠢箩,在原生端直接獲取手機(jī)代理事甜,通過(guò)channel調(diào)用flutter方法保存代理滔韵,在Dio初始化時(shí)進(jìn)行設(shè)置。優(yōu)點(diǎn)是省去測(cè)試人員二次輸入過(guò)程,原生和flutter抓包保持一致囱皿,缺點(diǎn)忱嘹,兩端都需要獲取代理。

所以拘悦,果斷選擇第二種,畢竟用戶至上础米,兩端處理也只是一次性操作??~~~~

實(shí)踐過(guò)程

1.原生端獲取手機(jī)代理
// iOS獲取手機(jī)代理
- (void)syncProxy{
      //自動(dòng)獲取手機(jī)代理
       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"]];
       //獲取為空時(shí)居然是字符串"(null)"
       if ([hostName isEqualToString:@"(null)"]) {
           hostName = @"";
       }
       if ([portName isEqualToString:@"(null)"]) {
           portName = @"";
       }
    //第二步:調(diào)用flutter方法將IP和端口傳入 自己寫(xiě)??
}

portalBaseUrlStr變量需要有值才能拿到IP和Port屁桑。方法調(diào)用可以放在APP啟動(dòng)時(shí),flutter初始化完成后靖秩,通過(guò)條件編譯只在DEBUG時(shí)調(diào)用即可~

2.flutter保存代理信息
///保存代理
void saveProxy(Map<String, dynamic> setting) async {
  String host = setting['host'] ?? '';
  String port = setting['port'] ?? '';
  String proxy = '';
  if (host.isNotEmpty && port.isNotEmpty) {
    proxy = 'PROXY ' + host + ':' + port;
  }
  SharedPreferences prefs = await SharedPreferences.getInstance();
  prefs.setString('proxy', proxy);
}

將從原生端接收到的代理信息保存在本地

3.Dio設(shè)置代理
///設(shè)置代理
void setupProxy() async {
    Dio dio = Dio();
    SharedPreferences prefs = await SharedPreferences.getInstance();
    String proxyStr = prefs.getString('proxy');
    if (proxyStr != null && proxyStr.isNotEmpty) {
      (dio.httpClientAdapter as DefaultHttpClientAdapter)
          .onHttpClientCreate = (client) {
        client.findProxy = (uri) {
          return proxyStr;
        };
        //忽略證書(shū)
        client.badCertificateCallback = (X509Certificate cert, String host, int port) => true;
      };
    }
  }

dio可通過(guò)懶加載方式進(jìn)行創(chuàng)建竖瘾,在dio對(duì)象初始化完成后,獲取本地保存的代理信息進(jìn)行設(shè)置即可惠拭。這里做了條件判斷庸论,如果沒(méi)有代理信息,則不進(jìn)行配置葡公。APP啟動(dòng)時(shí)會(huì)重置代理信息,所以無(wú)需擔(dān)心緩存代理的清理問(wèn)題涵亏。

結(jié)語(yǔ)

本文是對(duì)在flutter抓包實(shí)踐的一次學(xué)習(xí)和總結(jié),分享出來(lái)希望大家都能有所收獲??~

參考文章:
http://www.reibang.com/p/2e8491aabb04

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末拆内,一起剝皮案震驚了整個(gè)濱河市宠默,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌搀矫,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件融欧,死亡現(xiàn)場(chǎng)離奇詭異卦羡,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)欠肾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)拟赊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人虏肾,你說(shuō)我怎么就攤上這事欢搜》夂溃” “怎么了炒瘟?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵疮装,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我廓推,道長(zhǎng),這世上最難降的妖魔是什么呻纹? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮淑仆,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蔗怠。我一直安慰自己吩跋,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著涨缚,像睡著了一般。 火紅的嫁衣襯著肌膚如雪兰吟。 梳的紋絲不亂的頭發(fā)上茂翔,一...
    開(kāi)封第一講書(shū)人閱讀 49,031評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音珊燎,去河邊找鬼。 笑死晚吞,一個(gè)胖子當(dāng)著我的面吹牛谋国,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播芦瘾,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼近弟,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼缅糟!你這毒婦竟也來(lái)了祷愉?” 一聲冷哼從身側(cè)響起逃贝,我...
    開(kāi)封第一講書(shū)人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤沐扳,失蹤者是張志新(化名)和其女友劉穎句占,沒(méi)想到半個(gè)月后沪摄,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體纱烘,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡擂啥,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了屋吨。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片山宾。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖资锰,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情直秆,我是刑警寧澤鞭盟,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站懊缺,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏遗座。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一途蒋、第九天 我趴在偏房一處隱蔽的房頂上張望馋记。 院中可真熱鬧懊烤,春花似錦宽堆、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)浸遗。三九已至声怔,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間髓帽,已是汗流浹背盼樟。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工锈至, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人击碗。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓们拙,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親砚婆。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345