最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Flutter配置代理抓包實現(xiàn)過程詳解

 更新時間:2023年02月13日 16:30:32   作者:ifreeOvO  
這篇文章主要為大家介紹了Flutter配置代理抓包實現(xiàn)過程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

背景

在開發(fā)Flutter中,我們經(jīng)常需要對網(wǎng)絡請求進行調(diào)試,而Flutter自帶的devtool的network又不太好用,有時會出現(xiàn)請求成功,但是又看不到response返回(難道是我姿勢不對?)。于是我就嘗試通過抓包來查看請求

工具準備

  • 安裝charles
  • 有時我們需要抓https的請求,此時用charles抓包的內(nèi)容是加密的,看不到明文,這時候需要安裝下Charles的證書來解決。點擊help > SSL Proxying > Install Charles Root Certificate,安裝到系統(tǒng)的鑰匙串中。(這里借下了光哥小冊里的截圖)

點擊證書,將信任選項改成始終信任

開啟charles的代理。開啟后,確認Proxy選項卡與下方畫紅線的地方顯示一樣

配置Flutter代理

完成工具準備后,由于Flutter默認不走系統(tǒng)代理,所以我們還需要手動在Flutter項目中配置代理,charles才能正確抓到包。這里提供兩種方案,一種是在請求庫的配置里設置代理,另一種是利用Flutter原生的類來完成

方式一、http請求庫配置代理

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函數(shù)用來返回我們的代理接口,charles的默認的系統(tǒng)代理端口是8888,所以這里配置成

PROXY localhost:8888就可以了。下面一句client.badCertificateCallback函數(shù)也很關鍵,如果不進行配置,charles在抓包https請求時會出現(xiàn)下圖錯誤:

這個錯誤產(chǎn)生的原因,經(jīng)我查閱網(wǎng)上資料是因為Flutter請求https時用的是自己的CA認證證書,所以charles在認證證書時沒有通過,導致抓包錯誤。所以我們直接通過client.badCertificateCallback函數(shù)返回true來忽略證書就好了。

web_socket_channel配置代理

有了上面dio的配置后,還不夠,因為我們的websocket請求還是無法抓包。如果你項目中需要抓取websocket,可以使用web_socket_channel這個庫。需要注意的是這個庫不能從官網(wǎng)拉取,因為官方的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的經(jīng)驗后,我們配置web_socket_channel也是使用了差不多的思路,代碼如下:

import 'package:web_socket_channel/io.dart';
// 創(chuàng)建一個自己的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方法。原理也是一樣的,把findProxybadCertificateCallback方法進行替換。然后掛載到全局。

// 重寫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());
}

這種方案的好處是不受第三方請求庫限制,配置完后httpswebsocket都能正確抓包。效果如圖:

以上就是Flutter配置代理抓包實現(xiàn)過程詳解的詳細內(nèi)容,更多關于Flutter配置抓包的資料請關注腳本之家其它相關文章!

相關文章

  • Android仿微信底部菜單欄功能顯示未讀消息數(shù)量

    Android仿微信底部菜單欄功能顯示未讀消息數(shù)量

    這篇文章主要介紹了Android仿微信底部菜單欄功能,并顯示未讀消息數(shù)量,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-05-05
  • Android開發(fā)之使用SQLite存儲數(shù)據(jù)的方法分析

    Android開發(fā)之使用SQLite存儲數(shù)據(jù)的方法分析

    這篇文章主要介紹了Android開發(fā)之使用SQLite存儲數(shù)據(jù)的方法,結合實例形式分析了Android使用SQLite數(shù)據(jù)庫實現(xiàn)針對數(shù)據(jù)的增刪改查操作相關技巧,需要的朋友可以參考下
    2017-07-07
  • Android開發(fā)實現(xiàn)圖片大小與質(zhì)量壓縮及保存

    Android開發(fā)實現(xiàn)圖片大小與質(zhì)量壓縮及保存

    這篇文章主要為大家介紹了Android開發(fā)實現(xiàn)圖片大小與質(zhì)量壓縮及保存的方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-04-04
  • Android開發(fā)筆記之:Splash的實現(xiàn)詳解

    Android開發(fā)筆記之:Splash的實現(xiàn)詳解

    本篇文章是對Android中Splash的實現(xiàn)進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • 利用Android中的TextView實現(xiàn)逐字顯示動畫

    利用Android中的TextView實現(xiàn)逐字顯示動畫

    在安卓程序啟動的時候,想逐字顯示一段話,每個字都有一個從透明到不透明的漸變動畫。那如何顯示這個效果,下面一起來看看。
    2016-08-08
  • kotlin中object關鍵字的三種使用場景

    kotlin中object關鍵字的三種使用場景

    這篇文章主要給大家介紹了關于kotlin中object關鍵字的三種使用場景,文中通過示例代碼介紹的非常詳細,對大家學習或者使用kotlin具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2020-06-06
  • 代碼分析Android消息機制

    代碼分析Android消息機制

    本文通過代碼實例詳細分析了Android消息機制的相關知識點,對此有需要的朋友可以參考學習下。
    2018-03-03
  • Android開發(fā)之ProgressDialog進度對話框用法示例

    Android開發(fā)之ProgressDialog進度對話框用法示例

    這篇文章主要介紹了Android開發(fā)之ProgressDialog進度對話框用法,簡單介紹了ProgressDialog進度對話框常見函數(shù)功能,并結合實例形式分析了ProgressDialog組件創(chuàng)建及使用進度對話框相關操作技巧,需要的朋友可以參考下
    2019-03-03
  • 詳解Android WebView監(jiān)聽console錯誤信息

    詳解Android WebView監(jiān)聽console錯誤信息

    這篇文章主要介紹了Android WebView監(jiān)聽console錯誤信息,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • ListView的Adapter使用 之 初學ArrayAdapter String

    ListView的Adapter使用 之 初學ArrayAdapter String

    ListView是Android中經(jīng)常會使用的東西,綁定數(shù)據(jù)對于初學者來說,尤其是剛接觸編程的人來說,往往會覺得很難理解,我上大二的時候?qū)W的java,但是基本上相當于沒有學,什么都沒寫過,真正接觸編程就是開始上手學android,把這些記錄下來,自己可以回頭看下,也可以讓新手更好的理解
    2013-06-06

最新評論

宁津县| 临猗县| 富平县| 滦南县| 遂宁市| 龙口市| 永福县| 延安市| 东丽区| 潞西市| 凤冈县| 遂溪县| 新密市| 元朗区| 舒城县| 全椒县| 宁城县| 巴中市| 深州市| 祥云县| 无锡市| 祁东县| 塔城市| 郸城县| 武川县| 彰武县| 汝阳县| 临汾市| 同江市| 拜泉县| 鄂州市| 柳江县| 阳春市| 东兴市| 原阳县| 富阳市| 潜江市| 泰宁县| 黑河市| 河北省| 宁强县|