目录

大橙子

VX:ZzzChChen
Phone:13403656751
Email:zxydczzs@gmail.com

X

Charles抓包App,数据迁移过程

前言

博主从 2022 年 1 月 1 日开始使用 App Store 中的一个免费软件开始记账,就叫 A 记账软件吧,在前一段时间的某一天,发现 A 记账软件中的图片显示异常,还不觉得有什么,能记账就行了,直到 2023 年 1 月 9 日晚上下班到家后,照常打开记账软件,发现不仅图片不显示,记账功能还挂了,如下图所示

WechatIMG20.jpeg

紧接着就去找这个软件有没有账单导出的功能,找了一圈后,很遗憾,并没有此功能,一想到自己辛辛苦苦记了一年的账,一天都没落下,又害怕昨天图片没了, 今天记不了账了,万一明天连查询功能都不行的话,那就真完蛋了,一年白记。

于是一拍大腿想了个办法,既然它没有导出的功能,那我自己爬出来不就行了,我自己爬我自己的数据总可以吧trollface

最开始先搜了一圈爬手机 APP 的软件和方法,后来干脆直接问公司的测试同事,同事说可以使用 Charles 爬取,还贴心的给了个 pdf 的教程,万分感谢!

也就有了下面的故事

前期准备

首先博主的电脑和手机都是苹果系统,windowns 的大家能从本文中用到的方法就用,用不到我也没办法哈

一、软件下载&安装
  1. 进入 Charles 官网下载软件(https://www.charlesproxy.com/download/),我下载的是 macOS 的,大家根据自己系统下载对应版本的软件;

  2. 下载完成后安装打开,长这么个样子,大概就是左侧是对应的网络请求,右边是一些网络请求的详细信息;

    Snipaste20230111140550.png

二、软件设置&数据爬取
  1. HTTP 的网络请求暂时就不多赘述,现在大多数的网站请求都是 HTTPS 的方式,所以这里只演示一下 HTTPS 网络请求数据的爬取过程;

  2. 下载 CA 证书,软件菜单栏 Help — SSL Proxying — install Charles Root Certificate,下载完成后再钥匙串中将此证书设为信任

    Snipaste20230111141644.png
    Snipaste20230111141702.png
    Snipaste20230111141714.png

  3. Charles 中设置代理配置,菜单栏 Proxy — Proxy Settings,端口配置好,将勾选的打钩;

    Snipaste20230111142155.png

  4. 在手机中,打开设置 — 无线局域网 — 在目前连接的 WIFI 右边点击那个感叹号,进入后最下方有配置代理,改为手动方式,服务器为电脑的 IP 地址,端口就是上一步设置的端口,电脑 IP 可以在 Charles 软件菜单栏 — Help — Local Ip Address 获取;

  5. 手机下载 CA 证书,手机 Safari 浏览器打开此网址,将证书下载下来(http://charlesproxy.com/getssl),下载完成后,在手机设置中,会出现一个“已下载描述文件”,点击打开后安装,安装完成后,要在设置模块 —通用 — 关于本机中,拉到最下方有个证书信任设置,点进去后,将刚刚下载的证书勾选住,至此手机端已安装结束;

  6. 接下来就是打开你想爬的 APP,去看看 Charles 软件上的网络请求哪个是你正在打开的 APP 的,也比较好找,多点点看看哪个在闪就知道了,要是不想被其他请求干扰,软件下方还有过滤的功能;

  7. 这边我找到了自己想要的网络请求,点进去的效果,右边详细信息中,上面是请求,下面是相应,都分别有请求头(Headers)、文本(Text)、十六进制(Hex)以及 Raw,有的可能看到的 Contents 是乱码,如下图

    Snipaste20230111144002.png

  8. 出现乱码,在 Charles 菜单栏中,Proxy — SSL Proxying Settings,勾选 Enable SSL Proxying,下方 Include 中新增网址 + 端口,这边由于是 HTTPS 的方式,所以端口是 443,如下图

    Snipaste20230111144225.png

  9. 我们拦截请求试试,如下图所示,左侧变成文件夹形式的就证明设置生效了,在看也不乱码了,接口响应的 JSON 数据我们也看得到了

    Snipaste20230111144532.png
    Snipaste20230111144749.png

  10. 至此我们想要的数据已经拿到,该开始接下来的正事了!!!

三、寻找可靠记账软件

数据拿到之后,就在软件商店中找一个适合的软件,当然你想自己写一个记账软件,那我也不拦着你trollface ,经同事推荐,简称 B 记账软件,支持模板导入账单数据,这可正中下怀,一筹莫展之际都计划拦截软件的新增数据操作,将数据导入进去呢(虽然也尝试了,但是都是加密数据,没有加密方式和密钥根本实现不了),且该软件支持分类创建,扣款账户创建等非常完善的功能

市面上大多记账软件的基础信息大抵都是相同的,比如记账时间、分类、账户、💰、支出还是收入、备注等,所以我们下一步就是根据 B 记账软件的模板导入教程,将数据塞入至 Excel 中,一键导入!!!

数据我看了下有 1500 条不到,数据多怎么办?难不成一条一条的手动填充 Excel?怎么可能,我们可是无所不能的程序猿!思路大概就是,数据组装后,使用阿里开源的 EasyExcel 将数据一次性全部填充进 Excel 中,完美,说干就干;

数据迁移

一、数据入库
  1. 为了不一直去请求 A 软件的数据,我这边请求完成后将数据保存到了数据库中,之后我就查询数据库就可以了,还好开发软件的作者对于字段名称挺规范的,如果全是拼音的话我估计会难受死;
  2. 简单的基于 SpringBoot + Mybatis-Plus 将数据保存至 MySQL 数据库中,有 1439 条数据,嗯,都是我一年的心血;
  3. 然后就是解析各个字段的作用,尤其是整形数字的值,什么 1,2,3,4 这种的,还要根据原来的软件看是什么意思,比如 1 是银行卡,2 是微信,3 是支付宝,4 是信用卡,1 是支出,2 是收入等等,对照完成后,在 B 软件中建立对应的分类名称、扣款账户,保证无缝衔接(因为 B 软件的模板都是使用名称来标记的,所以提前将数据分组,把分类和扣款账户都创建好);
二、模板填充
  1. 这里我们使用 EasyExcel 中的填充功能(https://easyexcel.opensource.alibaba.com/docs/current/quickstart/fill),简单贴个代码、模板以及最终导出来的模版;

     1    @Override
     2    public List<BookRecordResp> queryBookRecord(HttpServletResponse response) {
     3        List<BookRecordDayBo> bookRecordList = this.baseMapper.selectBookRecord();
     4        List<BookRecordResp> respList = BeanUtil.copyToList(bookRecordList, BookRecordResp.class);
     5        String templateFileName = "/Users/zcc/Downloads/importBookRecord.xlsx";
     6        //导出模板
     7        ExcelWriter excelWriter = null;
     8        try {
     9            BufferedInputStream inputStream = FileUtil.getInputStream(templateFileName);
    10            excelWriter = EasyExcel.write(response.getOutputStream()).withTemplate
    11                    (inputStream).build();
    12        } catch (IOException e) {
    13            e.printStackTrace();
    14        }
    15        //读取Excel
    16        WriteSheet writeSheet = EasyExcel.writerSheet().build();
    17        //是否新增行
    18        FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build();
    19        excelWriter.fill(respList, fillConfig, writeSheet);
    20
    21        // 关闭流
    22        excelWriter.finish();
    23        return respList;
    24    }
    

    Snipaste20230111151220.png
    Snipaste20230111151256.png

三、数据导入

其实也没啥,都是 B 软件自己支持的功能,非常强大,导入后,对比了一下 A 软件和 B 软件 2022 年的统计信息,完全一致,至此,数据迁移完成;

小结

生活中的一点小事也可以当做我们 Get 新技能的方法

PS:注意这个 Charles 软件,打开半小时后会自动强制关闭,隔一会儿会弹一个小框,此时操作是无效的,强制关闭了重新打开就可以了。


标题:Charles抓包App,数据迁移过程
作者:zzzzchen
地址:https://dczzs.com/articles/2023/01/11/1673415831212.html