charles抓包flutter

一,准备工作

在我的另一篇文章flutter Dio发送post请求-CSDN博客里面,直接复用一部分代码

该方法无需让手机安装charles的ca证书(当然安装了也没事儿),也无需设置手机wifi的网络代理(因为ca证书的内容和网络代理都写进dart代码中了)

注:需要先打开charles作为代理,手机和电脑在同一局域网中(或者电脑or手机一个开热点给另一个连上)

二,coding

Dart 复制代码
import 'dart:convert';
import 'dart:io';
import 'dart:typed_data';
import 'package:dio/dio.dart';
import 'package:flutter/material.dart';
import 'package:dio/adapter.dart';

final Dio dio = Dio();

class AcceptCA extends HttpOverrides {
  // 信任证书
  @override
  HttpClient createHttpClient(SecurityContext? context) {
    SecurityContext securityContext = SecurityContext(withTrustedRoots: true);
    // ca证书的内容
    var caContent = Uint8List.fromList(utf8.encode('''-----BEGIN CERTIFICATE-----
MIIFKjCCBBKgAwIBAgIGAZIDF60vMA0GCSqGSIb3DQEBCwUAMIGZMSowKAYDVQQDDCFDaGFybGVz
IFByb3h5IENBICgxOCBTZXAgMjAyNCwgTCkxJTAjBgNVBAsMHGh0dHBzOi8vY2hhcmxlc3Byb3h5
LmNvbS9zc2wxETAPBgNVBAoMCFhLNzIgTHRkMREwDwYDVQQHDAhBdWNrbGFuZDERMA8GA1UECAwI
QXVja2xhbmQxCzAJBgNVBAYTAk5aMB4XDTI0MDkxNzAzMDUzNloXDTI1MDkxNzAzMDUzNlowgZkx
KjAoBgNVBAMMIUNoYXJsZXMgUHJveHkgQ0EgKDE4IFNlcCAyMDI0LCBMKTElMCMGA1UECwwcaHR0
cHM6Ly9jaGFybGVzcHJveHkuY29tL3NzbDERMA8GA1UECgwIWEs3MiBMdGQxETAPBgNVBAcMCEF1
Y2tsYW5kMREwDwYDVQQIDAhBdWNrbGFuZDELMAkGA1UEBhMCTlowggEiMA0GCSqGSIb3DQEBAQUA
A4IBDwAwggEKAoIBAQC7B4T2grKCDC0SH/W9v+lbZMYL9R4d34Xhe/g4l+MC38GYfq4oonIprMbb
wNpeSvlrriDeImp1/lGJsj3kkY3tcySki5IeNzpEEvBrsssExiecGKQNE2jg3sdNPChacL+rpuUy
pKs20Ciu/Xoz5ut4PxD2/D43Jfm/cBf25wZN97539EV7NjZl1lLTZL0u9YoVkBbJmY5WFQpvHVv2
r+SqVJjhio2gABkQITwbjBOmIWBggy1P8Fsv4KzbLxaO2hl8hFiehiJgNtLnEzgAU8Cby8CtEuFx
Xl2nkWCFK0RG30BLiLCsoeJyPJCOi4HQjM7EQhgsDr+aZ5aSZQ7tJd61AgMBAAGjggF0MIIBcDAP
BgNVHRMBAf8EBTADAQH/MIIBLAYJYIZIAYb4QgENBIIBHROCARlUaGlzIFJvb3QgY2VydGlmaWNh
dGUgd2FzIGdlbmVyYXRlZCBieSBDaGFybGVzIFByb3h5IGZvciBTU0wgUHJveHlpbmcuIElmIHRo
aXMgY2VydGlmaWNhdGUgaXMgcGFydCBvZiBhIGNlcnRpZmljYXRlIGNoYWluLCB0aGlzIG1lYW5z
IHRoYXQgeW91J3JlIGJyb3dzaW5nIHRocm91Z2ggQ2hhcmxlcyBQcm94eSB3aXRoIFNTTCBQcm94
eWluZyBlbmFibGVkIGZvciB0aGlzIHdlYnNpdGUuIFBsZWFzZSBzZWUgaHR0cDovL2NoYXJsZXNw
cm94eS5jb20vc3NsIGZvciBtb3JlIGluZm9ybWF0aW9uLjAOBgNVHQ8BAf8EBAMCAgQwHQYDVR0O
BBYEFD8hFf1Rncg+7ulyepOQ2uQrb8NcMA0GCSqGSIb3DQEBCwUAA4IBAQBXdrCNt+0gUOGRzIz7
JjyfVOicqcSjDrB3rSDjJC++BEQgBMNeeC/N8UxmVPar9lKN9aONoT3ylsSXG9vv2iuL2bJosz9y
Wf4VREg37JFFMRc87/MzvihTjvHHGC7KR4KcI3rE+d6S3Llq+LkakCdQZ343HTUi9NcNyF7sddl5
hh0Hf/00VJ63CZ1wHh5lW0XoRtnjpZScIVOKXvWmC405lCliWFhN4kC0M2+cXcT5Sy2FA22xE8ui
gUCIQZa/D623B/SYMKdbxT3aZSoFxkCaiGAh4LHmZ5vogm9OTc2hOzDssUbrTxyLFBwzXKQlHBTQ
bDi7/SxEYgwQ2XVEDBm/
-----END CERTIFICATE-----'''));
    securityContext.setTrustedCertificatesBytes(caContent);
    return super.createHttpClient(securityContext);
  }
}

main() {
  runApp(const MaterialApp(
    home: H(),
  ));
}

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

  @override
  State<H> createState() => _HState();
}

class _HState extends State<H> {
  String _resStr = "";

  @override
  void initState() {
    super.initState();
    HttpOverrides.global = AcceptCA();
    // 设置网络代理
    (dio.httpClientAdapter as DefaultHttpClientAdapter).onHttpClientCreate =
        (HttpClient client) {
      client.badCertificateCallback =
          (X509Certificate cert, String host, int port) => true;
      client.findProxy = (uri) => 'PROXY 192.168.111.111:8888';
    };
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: const Text("抓包测试"),
        ),
        body: Center(
          child: Text(
            _resStr,
            style: const TextStyle(fontSize: 30),
          ),
        ),
        floatingActionButton:
            FloatingActionButton(onPressed: _postRequestFunction));
  }

  void _postRequestFunction() async {
    FormData formData = FormData.fromMap({"sourceText": "Who are you?"});
    String url = "https://api.oioweb.cn/api/txt/QQFanyi";
    Response response = await dio.post(url, data: formData);
    setState(() {
      _resStr =
          json.decode(response.toString())["result"]["targetText"].toString();
    });
  }
}
相关推荐
一直在想名33 分钟前
Flutter 框架跨平台鸿蒙开发 - 黑白屏
flutter·华为·kotlin·harmonyos
AI_零食1 小时前
Flutter 框架跨平台鸿蒙开发 - 孤独指数应用
学习·flutter·开源·harmonyos
浮芷.2 小时前
Flutter 框架跨平台鸿蒙开发 - 儿童技能打卡墙应用
科技·flutter·华为·harmonyos·鸿蒙
Utopia^2 小时前
Flutter 框架跨平台鸿蒙开发 - 重力感知
flutter·华为·harmonyos
提子拌饭1332 小时前
昼夜节律下的肝脏代谢清除率演算仪:基于鸿蒙Flutter的双路流场与酶解粒子对照架构
flutter·华为·架构·harmonyos·鸿蒙
小雨天気.2 小时前
Flutter 框架跨平台鸿蒙开发 - 直觉训练器应用
flutter·华为·harmonyos
浮芷.2 小时前
Flutter 框架跨平台鸿蒙开发 - 姿势纠正助手应用
科技·flutter·华为·harmonyos·鸿蒙
一直在想名3 小时前
Flutter 框架跨平台鸿蒙开发 - 影子收藏家
flutter·华为·harmonyos
早點睡3903 小时前
Flutter for OpenHarmony三方库适配实战:palette_generator 图片调色板提取
flutter
2301_822703203 小时前
开源鸿蒙跨平台Flutter开发:跨端图形渲染引擎的类型边界与命名空间陷阱:以多维雷达图绘制中的 dart:ui 及 StrokeJoin 异常为例
算法·flutter·ui·开源·图形渲染·harmonyos·鸿蒙