一、什么是 Hook 技术
Hook 技术又叫做钩子函数,在系统没有调用该函数之前,钩子程序就先捕获该消息,钩子函数先得到控制权,这时钩子函数既可以加工处理(改变)该函数的执行行为,还可以强制结束消息的传递。简单来说,就是把系统的程序拉出来变成我们自己执行代码片段。
要实现钩子函数,有两个步骤:
1. 利用系统内部提供的接口,通过实现该接口,然后注入进系统(特定场景下使用)
2.动态代理(使用所有场景)
二、Hook 技术实现的步骤
Hook 技术实现的步骤也分为两步
1.找到 hook 点(Java 层),该 hook 点必须满足以下的条件:需要 hook 的方法,所属的对象必须是静态的,因为我们是通过反射来获取对象的,我们获取的是系统的对象,所以不能够 new 一个新的对象,必须用系统创建的那个对象,所以只有静态的才能保证和系统的对象一致。
2.将 hook 方法放到系统之外执行(放入我们自己的逻辑)
三、hook数据采集
因为该app需要兼容老版本,所以改版也不会影响老版本的数据采集。
提供接口:
1. 首页关键词的搜索。(搜索“袜子”,会出现袜子的所有分页商品,提供接口,并返回json串)
2. 店铺详情(包括店铺里面的所有商品简单信息)
3. 商品详情(提供接口,并返回json串)
4. 商品所有评论(提供接口并返回json串)
四、接口采集效率
正常情况下,一分钟多机器采集,最少可达到200次/分。硬件条件跟的上,那么数据ok。
五、hook思路
mou bao--app请求分为两部分:url header,不用登陆,其中几个关键参数:sid、rn、appkey、api等,因为是hook,所以不用知道sign的具体算法,只需将参数的json对象,传入底层invoke方法(参数一定写的一致,保证是一次请求),部署后开放一个自己的接口进行访问。机器压力承受力决定采集效率。
六、实战
稳定,比web端稳定太多了(吃过很多亏),还有一小处session失效问题,没有解决,欢迎交流讨论。评论区回复我。谢谢。