一行代码搞定Spring Boot反爬虫,防止接口盗刷!
前言:
做电商网站的时候,总有竞争对手利用爬虫来爬你的数据。如果你没有反爬虫措施,网站都可能被爬垮。好在阿里云现在有一些基础服务,可以帮你反爬虫,但是费用太贵。作为程序员,我们还是希望自己动手解决它! 我通过一行代码解决掉反爬虫,防止接口被刷后,解决掉了公司多年来对取证并告这些公司的繁琐法律问题。这不,公司给我的 80000 奖金立马就到账了!
废话不多说,下面开始正文吧!
kk-anti-reptile 是适用于基于 spring-boot 开发的分布式系统的反爬虫组件。
工作流程:
- kk-anti-reptile 使用基于 Servlet 规范的的 Filter 对请求进行过滤,在其内部通过 spring-boot
的扩展点机制,实例化一个 Filter,并注入到 Spring 容器 FilterRegistrationBean 中,通过
Spring 注入到 Servlet 容器中,从而实现对请求的过滤。 - 在 kk-anti-reptile 的过滤 Filter
内部,又通过责任链模式,将各种不同的过滤规则织入,并提供抽象接口,可由调用方进行规则扩展。 - Filter 调用则链进行请求过滤,如过滤不通过,则拦截请求,返回状态码
509,并输出验证码输入页面,输出验证码正确后,调用过滤规则链对规则进行重置。目前规则链中有如下两个规则。
ip-rule
ip-rule 通过时间窗口统计当前时间窗口内请求数,小于规定的最大请求数则可通过,否则不通过。时间窗口、最大请求数、ip 白名单等均可配置。
ua-rule
ua-rule 通过判断请求携带的 User-Agent,得到操作系统