Charles抓包App,数据迁移过程
前言
博主从2022年1月1日开始使用App Store中的一个免费软件开始记账,就叫A记账软件吧,在前一段时间的某一天,发现A记账软件中的图片显示异常,还不觉得有什么,能记账就行了,直到2023年1月9日晚上下班到家后,照常打开记账软件,发现不仅图片不显示,记账功能还挂了,如下图所示
紧接着就去找这个软件有没有账单导出的功能,找了一圈后,很遗憾,并没有此功能,一想到自己辛辛苦苦记了一年的账,一天都没落下,又害怕昨天图片没了, 今天记不了账了,万一明天连查询功能都不行的话,那就真完蛋了,一年白记。
于是一拍大腿想了个办法,既然它没有导出的功能,那我自己爬出来不就行了,我自己爬我自己的数据总可以吧!
最开始先搜了一圈爬手机APP的软件和方法,后来干脆直接问公司的测试同事,同事说可以使用Charles爬取,还贴心的给了个pdf的教程,万分感谢!
也就有了下面的故事
前期准备
首先博主的电脑和手机都是苹果系统,windowns的大家能从本文中用到的方法就用,用不到我也没办法哈
一、软件下载&安装
-
进入Charles官网下载软件(https://www.charlesproxy.com/download/),我下载的是macOS的,大家根据自己系统下载对应版本的软件;
-
下载完成后安装打开,长这么个样子,大概就是左侧是对应的网络请求,右边是一些网络请求的详细信息;
二、软件设置&数据爬取
-
HTTP的网络请求暂时就不多赘述,现在大多数的网站请求都是HTTPS的方式,所以这里只演示一下HTTPS网络请求数据的爬取过程;
-
下载CA证书,软件菜单栏 Help — SSL Proxying — install Charles Root Certificate,下载完成后再钥匙串中将此证书设为信任
-
Charles中设置代理配置,菜单栏 Proxy — Proxy Settings,端口配置好,将勾选的打钩;
-
在手机中,打开设置 — 无线局域网 — 在目前连接的WIFI右边点击那个感叹号,进入后最下方有配置代理,改为手动方式,服务器为电脑的IP地址,端口就是上一步设置的端口,电脑IP可以在Charles软件菜单栏 — Help — Local Ip Address 获取;
-
手机下载CA证书,手机Safari浏览器打开此网址,将证书下载下来(http://charlesproxy.com/getssl),下载完成后,在手机设置中,会出现一个“已下载描述文件”,点击打开后安装,安装完成后,要在设置模块 —通用 — 关于本机中,拉到最下方有个证书信任设置,点进去后,将刚刚下载的证书勾选住,至此手机端已安装结束;
-
接下来就是打开你想爬的APP,去看看Charles软件上的网络请求哪个是你正在打开的APP的,也比较好找,多点点看看哪个在闪就知道了,要是不想被其他请求干扰,软件下方还有过滤的功能;
-
这边我找到了自己想要的网络请求,点进去的效果,右边详细信息中,上面是请求,下面是相应,都分别有请求头(Headers)、文本(Text)、十六进制(Hex)以及Raw,有的可能看到的Contents是乱码,如下图
-
出现乱码,在Charles菜单栏中,Proxy — SSL Proxying Settings,勾选Enable SSL Proxying,下方Include中新增网址+端口,这边由于是HTTPS的方式,所以端口是443,如下图
-
我们拦截请求试试,如下图所示,左侧变成文件夹形式的就证明设置生效了,在看也不乱码了,接口响应的JSON数据我们也看得到了
-
至此我们想要的数据已经拿到,该开始接下来的正事了!!!
三、寻找可靠记账软件
数据拿到之后,就在软件商店中找一个适合的软件,当然你想自己写一个记账软件,那我也不拦着你 ,经同事推荐,简称B记账软件,支持模板导入账单数据,这可正中下怀,一筹莫展之际都计划拦截软件的新增数据操作,将数据导入进去呢(虽然也尝试了,但是都是加密数据,没有加密方式和密钥根本实现不了),且该软件支持分类创建,扣款账户创建等非常完善的功能
市面上大多记账软件的基础信息大抵都是相同的,比如记账时间、分类、账户、💰、支出还是收入、备注等,所以我们下一步就是根据B记账软件的模板导入教程,将数据塞入至Excel中,一键导入!!!
数据我看了下有1500条不到,数据多怎么办?难不成一条一条的手动填充Excel?怎么可能,我们可是无所不能的程序猿!思路大概就是,数据组装后,使用阿里开源的EasyExcel将数据一次性全部填充进Excel中,完美,说干就干;
数据迁移
一、数据入库
- 为了不一直去请求A软件的数据,我这边请求完成后将数据保存到了数据库中,之后我就查询数据库就可以了,还好开发软件的作者对于字段名称挺规范的,如果全是拼音的话我估计会难受死;
- 简单的基于SpringBoot + Mybatis-Plus 将数据保存至MySQL数据库中,有1439条数据,嗯,都是我一年的心血;
- 然后就是解析各个字段的作用,尤其是整形数字的值,什么1,2,3,4这种的,还要根据原来的软件看是什么意思,比如1是银行卡,2是微信,3是支付宝,4是信用卡,1是支出,2是收入等等,对照完成后,在B软件中建立对应的分类名称、扣款账户,保证无缝衔接(因为B软件的模板都是使用名称来标记的,所以提前将数据分组,把分类和扣款账户都创建好);
二、模板填充
-
这里我们使用EasyExcel中的填充功能(https://easyexcel.opensource.alibaba.com/docs/current/quickstart/fill),简单贴个代码、模板以及最终导出来的模版;
@Override public List<BookRecordResp> queryBookRecord(HttpServletResponse response) { List<BookRecordDayBo> bookRecordList = this.baseMapper.selectBookRecord(); List<BookRecordResp> respList = BeanUtil.copyToList(bookRecordList, BookRecordResp.class); String templateFileName = "/Users/zcc/Downloads/importBookRecord.xlsx"; //导出模板 ExcelWriter excelWriter = null; try { BufferedInputStream inputStream = FileUtil.getInputStream(templateFileName); excelWriter = EasyExcel.write(response.getOutputStream()).withTemplate (inputStream).build(); } catch (IOException e) { e.printStackTrace(); } //读取Excel WriteSheet writeSheet = EasyExcel.writerSheet().build(); //是否新增行 FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build(); excelWriter.fill(respList, fillConfig, writeSheet); // 关闭流 excelWriter.finish(); return respList; }
三、数据导入
其实也没啥,都是B软件自己支持的功能,非常强大,导入后,对比了一下A软件和B软件2022年的统计信息,完全一致,至此,数据迁移完成;
小结
生活中的一点小事也可以当做我们Get新技能的方法
PS:注意这个Charles软件,打开半小时后会自动强制关闭,隔一会儿会弹一个小框,此时操作是无效的,强制关闭了重新打开就可以了。