flutter dio網(wǎng)絡(luò)請求 charles網(wǎng)絡(luò)抓包

flutter dio 想charles抓包的話 必須代碼設(shè)置下電腦ip才行
寫死代碼里的話 不方便測試抓包,我寫了一個頁面
啟動app顯示出來,輸入一次ip后就可以抓包了, ip會保存本地
不刪除app就不用每次都輸入ip

app啟動時候可以先顯示這個頁面 設(shè)置好抓包后再進(jìn)入


class DevProxyPage extends StatefulWidget {
  const DevProxyPage({
    super.key,
  });

  @override
  State<DevProxyPage> createState() => _DevProxyPageState();
}

class _DevProxyPageState extends JDState<DevProxyPage> {
  String kDevDailiKey = 'kDevDailiKey';

  String get hasProxy {
    return JDCache.getString(kDevDailiKey) ?? 'false';
  }

  TextEditingController controller = TextEditingController();

  @override
  void initState() {
    if (hasProxy.isNotEmpty) {
      controller.text = hasProxy;
    }
    super.initState();
  }

  @override
  void dispose() {
    controller.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('設(shè)置Charles網(wǎng)絡(luò)代理'),
        actions: [
          TextButton(
              onPressed: () {
                // TDChangeEnvironmentDialog().showEnvironmentDialog(context);
              },
              child: const Text('環(huán)境設(shè)置'))
        ],
      ),
      body: JDScrollView(
        needDismissKeyBord: true,
        children: [
          50.vGap,
          Text(
            hasProxy.isNotEmpty ? '    當(dāng)前設(shè)置--有--代理$hasProxy' : '      沒有設(shè)置網(wǎng)絡(luò)代理',
            style: TextStyle(
                color: hasProxy.isNotEmpty ? Colors.red : Colors.black),
          ),
          Padding(
            padding: const EdgeInsets.all(30),
            child: JDTextField(
              '輸入Charles代理ip',
              textEditController: controller,
              editingCompleteCallBack: (text) {},
            ),
          ),
          20.vGap,
          JDButton(
            text: '代理抓包模式進(jìn)入首頁',
            backgroundColor: Colors.red,
            onPressed: () {
              if (controller.text.isNotEmpty) {
                JDCache.setString(kDevDailiKey, controller.text);
              }
              SetProxyRequest().setProxy(hasProxy, "8888");
              Future.delayed(const Duration(milliseconds: 300), () {
                jump();
              });
            },
          ),
          30.vGap,
          JDButton(
            text: '非代理模式 進(jìn)入首頁',
            onPressed: () {
              jump();
            },
          ),
        ],
      ),
    );
  }

  jump() {
    RouterUtil.popUntil(context);
    RouterContractPage.instance.splashPage
        .push(context, hideAnimation: true, replacement: true);
  }
}

// dio網(wǎng)絡(luò)代理抓包設(shè)置
class SetProxyRequest {
  void setProxy(String? proxyIP, String? proxyPort) {
    String? localProxy = "PROXY $proxyIP:$proxyPort";
    jdLog("localProxy=$localProxy");
    (TDDioInstance().dio.httpClientAdapter as IOHttpClientAdapter)
        .onHttpClientCreate = (client) {
      client.badCertificateCallback = (cert, host, port) {
        return true;
      };
      client.findProxy = (uri) {
        //  "PROXY 192.168.1.1:8888";
        return localProxy;
      };
      return null;
    };
  }
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容