背景
工商业电价都是由各个不同的电网企业自己维护然后上传到国网平台的,但是每个区域、城市的电价格式都是不一样的,所以没法通过自动化脚本来实现数据的解析和存储。我们现在采取的方式是到月底后人工半自动的方式来更新下个月的电价,费时费力,而且还容易出错。
今天花了些时间搜索了一把能提供电价信息的小程序,还真给我找到了,然后便产生了爬取 api 的想法。
安装 charles
charles 官方网站:www.charlesproxy.com/,可以自行下载
配置 http-proxy,打开菜单 Proxy -> Proxy Settings 勾选 HTTP Proxy,并输入端口号,自己定义即可,如下图
为了便于贴图,这里我要抓取的目标小程序就暂定成洛克公园吧,为啥是它?因为最近刚去打过球,它显示在列表前几位而已。我们这时尝试去抓取 PC 微信小程序的包,会发现 https 的请求显示都是 unkonwn,这是因为证书校验未通过,所以我们要安装 charles 的根证书。
安装 charles 根证书
点击菜单 Help -> SSL Proxying -> Install Charles Root Certificate 菜单,点击后会跳转到系统的钥匙串并添加一个证书,此时证书还属于不可信的状态。
双击证书,更改信任规则为始终信任
然后我们再尝试去抓取小程序的请求,可以看到 https 的请求就能正常显示了。不过这种方式也不是万能的,如果你要抓取的小程序是使用云函数开发的,你就会看到很多 mmtls 请求,这是微信的数据加密协议,我目前还没找到有什么很好的方式来对数据进行解密,不知道看到这篇文章的大佬们有没有什么方案。
手机抓包
原理类似,和电脑连入同一个网络中,然后在手机的网络配置成设置代理地址为电脑 ip,端口为 8888。
手机安装 SSL 证书,步骤如下:
Help -> Install Charles Root Certificate on a Mobile Device or remote Browser,点击之后系统会有一个弹窗,点击确定
手机上打开 chls.pro/ssl 下载证书文件,然后安装,安装方案不同的手机操作可能不太一样,可以在设置中输入CA证书,然后找到下载好的证书文件进行安装即可。
证书安装好后,在手机上打开网页或者是 app,就能在电脑上看到数据请求了。
其他抓包工具
- burp suite pro + proxifier
- fiddler
- wireshark
- anyproxy