日本免费精品_最新日韩一区_亚洲视频一区在线_a在线视频观看_天天射夜夜骑_粉嫩av一区二区三区_欧美中日韩免费视频_综合图区欧美_国内精品美女在线观看_午夜精品久久久久久久男人的天堂

首頁 > 系統 > Android > 正文

Flutter中http請求抓包的完美解決方案

2019-10-21 21:19:25
字體:
來源:轉載
供稿:網友

前言

前陣子有同學反饋Flutter中的http請求無法通過fiddler抓包,作者喜歡使用Charles抓包工具,于是抽時間寫了個小demo測試了一下,結論是在手機上設置代理,Charles確實抓不到請求數據包。于是對該問題進行了分析:

  • 確定使用的是http發起的get請求,理論上http協議應該可以被Charles抓到包的,如果沒有抓到包,那可能是沒有走代理,于是乎通過將筆記本連接的wifi斷開測試了一下手機上APP發起http請求,發現請求成功,證實確實沒有走代理;
  • 為什么http請求沒有通過wifi走代理呢,因為之前安卓原生使用的一些http框架都是正常走代理的啊,那是不是有可能代碼中有api方法可以設置請求不走代理,于是乎就研讀了一下Flutter中http相關的源碼,最終找到了答案。

http請求源碼跟蹤

http.dart中的HttpClient是一個抽象類,成員方法的具體實現在http_impl.dart中,http的get請求實現如下:

Future<HttpClientRequest> getUrl(Uri url) => _openUrl("get", url);Future<_HttpClientRequest> _openUrl(String method, Uri uri) { . . . // Check to see if a proxy server should be used for this connection. var proxyConf = const _ProxyConfiguration.direct(); if (_findProxy != null) { // TODO(sgjesse): Keep a map of these as normally only a few // configuration strings will be used. try { proxyConf = new _ProxyConfiguration(_findProxy(uri)); } catch (error, stackTrace) { return new Future.error(error, stackTrace); } } return _getConnection(uri.host, port, proxyConf, isSecure) .then((_ConnectionInfo info) { . . . });}

首先,我們可以發現方法中有一行注釋// Check to see if a proxy server should be used for this connection.,意思是“檢查是否應該使用代理服務器進行此連接”;

然后,有一個proxyConf對象初始化和根據_findProxy來創建新的proxyConf對象的語句,然后通過_getConnection(uri.host, port, proxyConf, isSecure)來創建連接,_getConnection的源碼如下:

Future<_ConnectionInfo> _getConnection(String uriHost, int uriPort, _ProxyConfiguration proxyConf, bool isSecure) { Iterator<_Proxy> proxies = proxyConf.proxies.iterator; Future<_ConnectionInfo> connect(error) { if (!proxies.moveNext()) return new Future.error(error); _Proxy proxy = proxies.current; String host = proxy.isDirect ? uriHost : proxy.host; int port = proxy.isDirect ? uriPort : proxy.port; return _getConnectionTarget(host, port, isSecure) .connect(uriHost, uriPort, proxy, this) // On error, continue with next proxy. .catchError(connect); } return connect(new HttpException("No proxies given"));}

從代碼中我們可以看到根據代理配置信息來將請求的host和port進行重置,然后創建真實的連接。

跟蹤以上源碼我們發現dart中http請求是否走代理是需要配置的,而_findProxy變量和配置的代理信息有關。

http__impl.dart文件中的_HttpClient類中定義了_findProxy的默認值

Function _findProxy = HttpClient.findProxyFromEnvironment;

HttpClient類中findProxyFromEnvironment方法的實現

static String findProxyFromEnvironment(Uri url, {Map<String, String> environment}) { HttpOverrides overrides = HttpOverrides.current; if (overrides == null) { return _HttpClient._findProxyFromEnvironment(url, environment); } return overrides.findProxyFromEnvironment(url, environment);}

_HttpClient類中_findProxyFromEnvironment方法的實現

static String _findProxyFromEnvironment( Uri url, Map<String, String> environment) { checkNoProxy(String option) { if (option == null) return null; Iterator<String> names = option.split(",").map((s) => s.trim()).iterator; while (names.moveNext()) { var name = names.current; if ((name.startsWith("[") && name.endsWith("]") && "[${url.host}]" == name) || (name.isNotEmpty && url.host.endsWith(name))) { return "DIRECT"; } } return null; } checkProxy(String option) { if (option == null) return null; option = option.trim(); if (option.isEmpty) return null; int pos = option.indexOf("://"); if (pos >= 0) { option = option.substring(pos + 3); } pos = option.indexOf("/"); if (pos >= 0) { option = option.substring(0, pos); } // Add default port if no port configured. if (option.indexOf("[") == 0) { var pos = option.lastIndexOf(":"); if (option.indexOf("]") > pos) option = "$option:1080"; } else { if (option.indexOf(":") == -1) option = "$option:1080"; } return "PROXY $option"; } // Default to using the process current environment. if (environment == null) environment = _platformEnvironmentCache; String proxyCfg; String noProxy = environment["no_proxy"]; if (noProxy == null) noProxy = environment["NO_PROXY"]; if ((proxyCfg = checkNoProxy(noProxy)) != null) { return proxyCfg; } if (url.scheme == "http") { String proxy = environment["http_proxy"]; if (proxy == null) proxy = environment["HTTP_PROXY"]; if ((proxyCfg = checkProxy(proxy)) != null) { return proxyCfg; } } else if (url.scheme == "https") { String proxy = environment["https_proxy"]; if (proxy == null) proxy = environment["HTTPS_PROXY"]; if ((proxyCfg = checkProxy(proxy)) != null) { return proxyCfg; } } return "DIRECT";}

從以上代碼中可以發現代理配置從environment中讀取,設置代理時必須指定http_proxy或https_proxy等。而從_openUrl方法實現中proxyConf = new _ProxyConfiguration(_findProxy(uri));得出默認情況下environment是為空的,所以要想在Flutter的http請求中使用代理,則要指定相應的代理配置,即設置httpClient.findProxy的值。

示例代碼:

_getHttpData() async { var httpClient = new HttpClient(); httpClient.findProxy = (url) { return HttpClient.findProxyFromEnvironment(url, environment: {"http_proxy": 'http://192.168.124.7:8888',}); }; var uri = new Uri.http('t.weather.sojson.com', '/api/weather/city/101210101'); var request = await httpClient.getUrl(uri); var response = await request.close(); if (response.statusCode == 200) { print('請求成功'); var responseBody = await response.transform(Utf8Decoder()).join(); print('responseBody = $responseBody'); } else { print('請求失敗'); }}

以上代碼設置后即可使用Fiddler或Charles抓包了。

注:

  • 代碼中已設置代理,手機wifi不再需要進行代理設置;
  • 192.168.124.7該IP為我們需要抓包的Charles所在電腦IP;

第二種抓包解決方案

如果使用Flutter寫的APP不手動設置代理,則可以使用另一種方案來抓包。

通過電腦設置熱點 -> 使用手機連接電腦熱點上網 -> 在電腦上使用Wireshark抓數據包。

具體步驟如下(macOS系統下):

1. 打開系統偏好設置,找到“共享”

Flutter,http請求,抓包

2. 打開“共享”,顯示以下窗口,并選擇共享以下來源的連接為指定的有線網絡,用以下端口共享給電腦選擇為Wi-Fi

Flutter,http請求,抓包

3. 點擊右下角Wi-Fi選項按鈕,顯示如下,填寫對應信息后點擊“好”保存

Flutter,http請求,抓包

4. 回到剛才的“共享”窗口,打開左側窗口中的服務“互聯網共享”

Flutter,http請求,抓包

5. 然后打開Wireshark軟件界面,首頁選擇對應開熱點的網絡雙擊

Flutter,http請求,抓包

6. 請求接口域名t.weather.sojson.com對應的IP為 58.222.18.24,則在上面輸入框中輸入請求過濾條件 "ip.dst == 58.222.18.24",然后通過手機APP發起網絡請求

查看接口的IP地址

$ ping t.weather.sojson.comPING nm.ctn.aicdn.com (58.222.18.24): 56 data bytes64 bytes from 58.222.18.24: icmp_seq=0 ttl=54 time=16.792 ms64 bytes from 58.222.18.24: icmp_seq=1 ttl=54 time=16.926 ms64 bytes from 58.222.18.24: icmp_seq=2 ttl=54 time=15.804 ms

Flutter,http請求,抓包

7. 選擇對應的http請求,箭頭指定行,右鍵點擊,選擇Follow->HTTP Stream選項

Flutter,http請求,抓包

8. 彈出具體網絡請求信息窗口如下

Flutter,http請求,抓包

寫在最后

本篇分享了兩種Flutter中http數據包的抓包解決方案,大家可以根據實際情況來選擇使用。

好了,以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對VEVB武林網的支持。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
日韩美女视频一区二区在线观看| 午夜国产视频| 国产三级精品网站| 欧美三级在线看| 国产激情在线观看| 成年人黄国产| 久久综合久久综合九色| 国产91大片| 91精品视频观看| 婷婷久久综合九色国产成人| 亚洲 欧美 精品| 在线精品视频免费播放| 91精品视频国产| 国产在线导航| 日韩精品视频在线| 日韩欧美中文在线| 国产一区久久| 欧美日韩精品是欧美日韩精品| 91吃瓜在线观看| 国产一级粉嫩xxxx| 免费国产h视频在线观看86| 黄色国产网站在线观看| 亚洲精品中文字幕乱码三区不卡| 国产三级在线| 日韩精品中文字幕第1页| 亚洲免费在线视频一区 二区| 国产黄色高清在线| 精品三区视频| 日韩久久精品视频| 成年人黄国产| 自拍日韩亚洲一区在线| 精品激情国产视频| 在线视频观看日韩| 91精品婷婷国产综合久久| 亚洲欧美日本另类| 亚洲二区自拍| 欧美黄页在线免费观看| 国产不卡的av| 国产丝袜一区| 国产三级视频网站| 日韩不卡一二三区| 在线一区二区三区精品| 不卡视频一区二区| 日韩欧美在线综合网| 天天摸日日摸狠狠添| 欧美日韩国产系列| 欧美日韩第一区日日骚| 欧美日韩高清| av免费在线播放| 久久视频在线免费观看| 欧美日韩一二三| 亚洲三级国产| 最近中文字幕在线中文高清版| 日韩国产欧美| 中文字幕亚洲国产| 国产区日韩欧美| 黄污视频在线看| 欧美日韩高清在线播放| 中文字幕最新精品| 日韩精品视频在线观看视频| 国产一区免费视频| 在线视频观看日韩| 精品视频在线导航| 国产日韩在线亚洲字幕中文| 国产一级片在线| 欧美黄页在线免费观看| 久久久99免费| 国产wwww| 日韩精品在线免费观看| 亚洲福利在线视频| 天天摸日日摸狠狠添| 精品成a人在线观看| 国产欧美日韩高清| 91精品国产综合久久蜜臀| 国产www在线观看| 欧美日韩中文字幕精品| 在线视频亚洲| 欧美日韩在线视频一区| 欧美自拍一区| 视频一区视频二区中文| 天天综合天天做| 欧美不卡一二三| 国产婷婷精品| 97最新国自产拍视频在线完整在线看| 欧美久久久久久蜜桃| 亚洲经典中文字幕| 免费在线视频一级不卡| 91久久中文| 欧美 日韩 国产 在线观看| 91亚洲欧美| av中文天堂在线| 日韩不卡一二区| 欧美日韩精品免费看| 日韩一级免费视频| 中文字幕第一页在线播放| 日韩www在线| 中文字幕综合在线| 久久久精品99| 日韩三级精品| 欧美日韩精品欧美日韩精品| 中文在线不卡| 国产视频三级在线观看播放| 白嫩少妇丰满一区二区| 午夜影院在线观看欧美| www.中文字幕在线| 国产视频二区| 在线观看免费国产成人软件| 一级特黄大欧美久久久| 欧美三级在线视频| 视频一区不卡| 国产高潮久久久| 国产一级在线播放| 欧美日韩国产首页在线观看| 日韩在线播放一区二区| 欧美日韩高清在线播放| 精品激情国产视频| 狠狠色综合色区| 在线观看一区日韩| 91精品久久久久久久久| 日韩av一区二区在线| 中文亚洲免费| 欧美日韩在线精品一区二区三区激情综| 一级片在线播放| 亚洲热在线观看| 久久精品日韩欧美| 国产日韩中文字幕| 欧美三级网址| 日韩中文欧美| 欧美日韩高清在线一区| 国产欧美一级| 国内精品不卡| 日韩精品在线观看视频| 国产福利免费在线观看| 精品日韩99亚洲| 久久精品不卡| 国产成免费视频| 国产美女主播视频一区| 精品久久香蕉国产线看观看gif| 国产99精品| 国产黄色在线| 91麻豆精品国产91久久久使用方法| lutube成人福利在线观看| 蜜臀91精品国产高清在线观看| 欧美三级三级三级爽爽爽| 精品日韩在线观看| 亚洲福利一区二区三区| 91精品国产经典在线观看| 国产高清精品在线观看| 国产小视频免费在线观看| 欧美日韩视频免费播放| 欧美 日韩 国产在线观看| 在线欧美日韩国产| 欧美日韩视频网站| 日韩欧美专区在线| 国产丝袜在线播放| 欧美日韩中文字幕在线视频| 欧美片网站免费| 中文在线视频观看| 中文不卡在线| 91精品国产91久久| 91精品在线观看视频| 99综合视频| 日韩精品在线视频观看| 国产小视频免费在线观看| 精品久久久久久综合日本欧美| 91精品久久久久久久久久入口| 在线视频你懂得一区| 国产亚洲欧美色| 色偷偷一区二区三区| 欧美日韩99| 国产乱国产乱300精品| 欧美日韩高清在线播放| 亚洲一区在线观看网站| 在线国产1区| 精品色蜜蜜精品视频在线观看| 91麻豆精品在线| 一区二区三区精品99久久| 欧美日韩三级在线观看| 国产天堂素人系列在线视频| 精品日韩欧美在线| 久久精品一二三| 精品在线网站观看| 精品视频www| 影音先锋一区二区资源站| 黄色欧美日韩| 欧美日韩中文字幕日韩欧美| 最近中文字幕在线中文高清版| 影音先锋一区二区资源站| 国产一级网站视频在线| 日韩av一区在线| 欧美亚洲另类制服自拍| 久久久综合av| 欧美日韩综合高清一区二区| 亚洲一区精品在线| 中文字幕日韩欧美| 国产男女av| 日韩精品视频在线| 在线不卡一区二区| 视频一区日韩| 久久av免费| 香蕉精品久久| 日韩在线视频精品| 亚洲a一级视频| 亚洲一区激情| 亚洲成av人综合在线观看| 中文字幕伊人| 久久中文精品| 久久av免费| 在线精品日韩| 美日韩精品免费视频| 欧美在线视频二区| 一区二区视频免费看| 日韩中文字幕亚洲| 一区二区在线看| 91久久中文| 天天综合天天添夜夜添狠狠添| 日韩欧美高清在线| 91精品国产自产| 亚洲国产91精品在线观看| 欧美日韩精品电影| 中文字幕无线码一区| 久久麻豆视频| 91精品国产综合久久福利| 精品国产91| 一区二区三区免费看视频| 91久久视频| 色综合久久88色综合天天免费| 91 中文字幕| 免费在线观看国产黄| 一二三区精品视频| h片精品在线观看| 日韩在线视频网| 黄色在线播放网站| 中文在线第一页| 欧美日韩一二三四| 在线黄色国产电影| 午夜一区二区视频| 二区视频在线观看| 国产在线一区二区视频| 亚洲视频中文字幕| 国产日韩三级| 精品在线网站观看| 中文字幕 日韩 欧美| 欧美日韩在线第一页| 中文字幕精品一区二区三区在线| 日韩精品午夜| 日韩欧美国产高清91| 日韩视频国产视频| 日韩在线视频网| 亚洲热在线观看| 中文字幕第一页在线播放| 亚洲免费播放| 国产不卡一区| 中文在线第一页| 在线综合 亚洲 欧美中文字幕| 日韩欧美国产亚洲| 欧美日韩精品免费在线观看视频| 欧美日韩久久久| 亚亚洲欧洲精品| 久久久精品网| 中文字幕日韩欧美在线| 亚洲最大黄色| 国产欧美日韩中文| 亚洲娇小xxxx欧美娇小| 欧美不卡123| 日本a口亚洲| 精品视频1区2区3区| 欧美日韩性视频一区二区三区| 一区在线视频观看| 久久久91精品国产| 精品999视频| 国产1卡2卡三卡四卡网站| 亚洲综合在线中文字幕| 亚洲一区导航| 欧美日韩亚洲一区| 欧美日韩综合视频网址| 精品久久久精品| 精品国产综合久久| 精品欧美日韩在线| 男人的天堂网av| 91精品国产91| 欧美亚洲另类制服自拍| 不卡视频一区二区三区| 国产日韩免费| 中文字幕在线欧美| 国产黄色片大全| 日韩网站中文字幕| 韩国v欧美v日本v亚洲| 亚洲欧美伊人| 免费中文字幕日韩欧美| 精品在线一区二区| 亚洲日本欧美日韩高观看| www在线播放| 日韩精品免费视频一区二区三区| 精品视频在线导航| 精品三级av| 欧美国产亚洲一区| 欧美日韩亚洲不卡| 日韩精品午夜| 在线中文字幕视频观看| 亚洲一区中文字幕在线观看| 亚洲 欧美综合在线网络| 日韩一级中文字幕| 日韩精品 欧美| 欧美日韩高清在线播放| 国产中文在线| 日本免费在线视频不卡一不卡二| 亚洲视频 中文字幕| 欧美国产日韩在线播放| 中文字幕在线看视频国产欧美| 精品婷婷伊人一区三区三| 国产日韩精品视频| 国产三级精品在线观看| 日韩在线三区| 日韩免费视频| 精品日韩欧美| 视频一区视频二区中文| 亚洲一级特黄| wwwwww国产| wwwwww在线观看| 欧美综合精品| 欧美日韩午夜在线| 亚洲第一页中文字幕| 亚洲第一网中文字幕| 日韩.欧美.亚洲| 国产欧美日韩在线| 国产一卡二卡3卡4卡四卡在线| 欧美日韩国产影片| 欧美日韩高清一区二区| 国产成人精品免费网站| 99色在线视频| 一区二区三区精品99久久| 国产在线第一页| 亚洲黄色在线观看| 国产一区二中文字幕在线看| 日韩一级视频在线观看| 日韩不卡在线播放| 免费高清特黄a大片| 国产在线日韩精品| 欧美日韩在线不卡视频| 中文字幕在线观看视频www| 欧美日韩999| 久久久精品日韩| 国产区视频在线观看| 日韩中文字幕| 日韩精品乱码av一区二区| 日韩欧美中文字幕在线播放| 久久久精品日韩| 国产亚洲人成a一在线v站| 日韩欧美99| 蜜桃视频一日韩欧美专区| 亚洲福利精品| 欧美一级在线免费| 国产视频aaa| 欧美色欧美亚洲高清在线视频| 亚洲欧洲日韩在线| 你懂的亚洲视频| 92久久精品| 日韩国产91| 国产资源在线观看| 国产成人精品亚洲| 亚洲成年人在线播放| 影音先锋一区二区资源站| 国产成人精品999| 国产三级视频在线播放线观看| 欧美日韩精品综合在线| www.av中文字幕| 欧美日韩在线中文字幕| 国产精品福利视频一区二区三区| 欧美日韩三级一区| 91日韩欧美| 国产区日韩欧美| 美国av一区二区| 一本一道综合狠狠老| 日韩三级免费观看| а√天堂8资源中文在线| 亚洲va久久久噜噜噜久久| 日韩亚洲一区在线| 国产欧美日韩在线看| 日韩在线观看视频一区| 久久精品黄色片| 在线国产三级| 亚洲午夜久久| 久久香蕉av| 欧美日韩性视频在线| 日本不卡一区在线| 国产一区深夜福利| 久久 天天综合| 精品一性一色一乱农村| 日韩欧美中文在线| 日韩欧美国产高清| 在线国产日本| 欧美日韩综合在线观看| 欧美日韩高清不卡| 亚洲 欧美 日韩系列| 亚洲羞羞网站| 日韩欧美亚洲日产国| 日韩精品福利视频| 蜜臀91精品国产高清在线观看| av免费观看网站|