爬取与反爬。cookie机制,5s盾机制
TLS 指纹
现在绝大多数的网站都已经使用了 HTTPS,要建立 HTTPS 链接,服务器和客户端之间首先要进行 TLS 握手,在握手过程中交换双方支持的 TLS 版本,加密算法等信息。不同的客户端之间的差异 很大,而且一般这些信息还都是稳定的,所以服务端就可以根据 TLS 的握手信息来作为特征,识别 一个请求是普通的用户浏览器访问,还是来自 Python 脚本等的自动化访问。
JA3 是生成 TLS 指纹的一个常用算法。它的工作原理也很简单,大概就是把以上特征拼接并求 md5。
cookie 机制破解
首次请求会拉取一段js代码等,生成cookie。结合抓包工具可以看到首次拉取的代码进行破解或者cookie生成规则,有动态和静态两种需要区分对待。
在后续的请求中携带头次生成的cookie即可
CloudFlare 5s盾 免费版破解
curl_cffi 破解设备指纹
1 2 3 4 5 6 7
| from curl_cffi import requests
# 注意这个 impersonate 参数,指定了模拟哪个浏览器 r = requests.get("https://tls.browserleaks.com/json", impersonate="chrome101")
print(r.json()) # output: {'ja3_hash': '53ff64ddf993ca882b70e1c82af5da49'
|
cloudscraper 破解
1 2 3
| import cloudscraper scraper = cloudscraper.create_scraper() resp = scraper.get('目标网站').text
|
CloudFlare 5s盾 付费版 破解
使用Docker容器
1 2 3 4 5 6 7
| docker run -d \ --name=flaresolverr \ -p 8191:8191 \ -e LOG_LEVEL=info \ --restart unless-stopped \ ghcr.io/flaresolverr/flaresolverr:latest
|
这个容器启动以后,会开启8191端口。我们通过往这个端口发送http请求,让他转发请求给目标网站,就可以绕过五秒盾。关键原因就在这个项目中:
FlareSolverr
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| import requests import json
url = "http://localhost:8191/v1"
payload = json.dumps({ "cmd": "request.get", "url": "https://www.coinbase.com/ventures/content", "maxTimeout": 60000 }) headers = { 'Content-Type': 'application/json' }
response = requests.post(url, headers=headers, data=payload)
# 这个Docker镜像启动的接口,返回的数据是JOSN,网页源代码在其中的.solution.response中 print(response.json()['solution']['response'])
|