南航随心飞机票爬虫解密 acw_sc__v2
最近在写南航随心飞机票的爬虫,部分 API 都是不加密的,可以直接抓取。但是很核心的抓取某日每个航班库存的 API 是加密的。
经过分析,这个 API 请求的时候,cookie 里有两个强制的字段,一个是 TOKEN,这是用户登录信息。另一个是 acw_sc__v2
这是用来加密的字段,如果参数不对,会返回一个加密的 html 页面,需要解密。
自己解密比较麻烦,也许可以用无头浏览器搞,但我没有尝试。经过搜索(搜索关键词就是 acw_sc__v2),发现这是个和阿里云有关的加密方式,github 上已经有个清华的大佬写好了解密的库 node.js 和 python 版本,可以直接使用,使用时用该 lib 替换 request 即可。
我看了 python 库的实现,主要是拦截请求的返回,如果是加密页面,就调用解密的 API 进行解密,然后带着加码字段,再请求,就能有正常的返回了。
python 库里引用的作者自己 host 的解码 API 已经不能使用了,(当然,使用的话也可能会有安全风险),我也作者提了 issue, 作者回复很快,但尚未修复,提供的 selfhost 的方案。
好在作者提供的 self 的 docker 镜像可以直接使用,直接拉取下, 然后把请求自己的 selfhost 的 API 即可。
docker run --rm --interactive --tty --publish 3000:3000 ghcr.io/wangyihang/acw-sc-v2.js:main
我本地有 3000 端口的服务在运行,所以我改成了 3001 端口, 然后保持在后台运行
docker run -d -p 3001:3000 ghcr.io/wangyihang/acw-sc-v2.js:main
参考github代码库:
- js lib
- [python lib](https://github.com/WangYihang/acw-sc-v2-py)
- golang lib
- 在线试用
参考解密技术文章: