爬虫:5s盾的破解-cookie破解

爬取与反爬。cookie机制,5s盾机制

   

TLS 指纹

现在绝大多数的网站都已经使用了 HTTPS,要建立 HTTPS 链接,服务器和客户端之间首先要进行 TLS 握手,在握手过程中交换双方支持的 TLS 版本,加密算法等信息。不同的客户端之间的差异 很大,而且一般这些信息还都是稳定的,所以服务端就可以根据 TLS 的握手信息来作为特征,识别 一个请求是普通的用户浏览器访问,还是来自 Python 脚本等的自动化访问。

JA3 是生成 TLS 指纹的一个常用算法。它的工作原理也很简单,大概就是把以上特征拼接并求 md5。

首次请求会拉取一段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'])