<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
在開發Flutter中,我們經常需要對網路請求進行偵錯,而Flutter自帶的devtool的network又不太好用,有時會出現請求成功,但是又看不到response返回(難道是我姿勢不對?)。於是我就嘗試通過抓包來檢視請求
help > SSL Proxying > Install Charles Root Certificate
,安裝到系統的鑰匙串中。(這裡借下了光哥小冊裡的截圖)點選證書,將信任選項改成始終信任
開啟charles的代理。開啟後,確認Proxy
索引標籤與下方畫紅線的地方顯示一樣
完成工具準備後,由於Flutter預設不走系統代理,所以我們還需要手動在Flutter
專案中設定代理,charles
才能正確抓到包。這裡提供兩種方案,一種是在請求庫的設定裡設定代理,另一種是利用Flutter
原生的類來完成
dio
設定代理
flutter專案裡通常用dio
庫做http請求,我們可以通過dio的httpClientAdapter
屬性設定我們的本地代理。程式碼如下:
import 'package:dio/dio.dart'; var dio = Dio(); (dio.httpClientAdapter as DefaultHttpClientAdapter).onHttpClientCreate = (client) { client.findProxy = (uri) { return 'PROXY localhost:8888'; }; client.badCertificateCallback = (X509Certificate cert, String host, int port) => true; //忽略證書 };
其中client.findProxy
函數用來返回我們的代理介面,charles的預設的系統代理埠是8888
,所以這裡設定成
PROXY localhost:8888
就可以了。下面一句client.badCertificateCallback
函數也很關鍵,如果不進行設定,charles在抓包https請求時會出現下圖錯誤:
這個錯誤產生的原因,經我查閱網上資料是因為Flutter請求https時用的是自己的CA認證證書,所以charles在認證證書時沒有通過,導致抓包錯誤。所以我們直接通過client.badCertificateCallback
函數返回true
來忽略證書就好了。
有了上面dio
的設定後,還不夠,因為我們的websocket
請求還是無法抓包。如果你專案中需要抓取websocket
,可以使用web_socket_channel
這個庫。需要注意的是這個庫不能從官網拉取,因為官方的web_socket_channel
的還不支援代理,我在官方的程式碼倉庫看到有幾個與支援代理相關的pr請求,但是官方都還沒有進行合併分支,所以我就自己fork倉庫修改了一下,我們可以改成以下方式進行安裝:
dependencies: web_socket_channel: git: url: https://github.com/IFreeOvO/web_socket_channel.git ref: master
然後我們開始設定web_socket_channel
,不過有了之前設定dio
的經驗後,我們設定web_socket_channel
也是使用了差不多的思路,程式碼如下:
import 'package:web_socket_channel/io.dart'; // 建立一個自己的HttpClient物件 SecurityContext ctx = SecurityContext.defaultContext; HttpClient client = HttpClient(context: ctx) ..findProxy = ((uri) { return 'PROXY localhost:8888'; }) ..badCertificateCallback = (cert, host, port) { return true; }; _channel = IOWebSocketChannel.connect( 'wss://xxx.com', customClient: client, // 使用客製化的HttpClient );
在入口檔案main.dart
裡定義一個HttpOverrides
的子類,重寫它的createHttpClient
方法。原理也是一樣的,把findProxy
和badCertificateCallback
方法進行替換。然後掛載到全域性。
// 重寫HttpOverrides class MyHttpOverrides extends HttpOverrides { @override HttpClient createHttpClient(SecurityContext? context) { var http = super.createHttpClient(context); http.findProxy = (uri) { return 'PROXY localhost:8888'; }; http.badCertificateCallback = (X509Certificate cert, String host, int port) => true; return http; } } void main() { HttpOverrides.global = MyHttpOverrides(); // 使用自己的HttpOverrides類 runApp(MyApp()); }
這種方案的好處是不受第三方請求庫限制,設定完後https
和websocket
都能正確抓包。效果如圖:
以上就是Flutter設定代理抓包實現過程詳解的詳細內容,更多關於Flutter設定抓包的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45