通常情况下,我们爬取网站会设置agent 等相关参数,但是对于Cloudflare网站,除了这些以外还需要设置,tls指纹和和http2指纹。golang的net基础库没有对其进行支持,访问的时候还是会附带golang的特征,这时候我们就要保证golang 请求的特征和浏览器请求的特征一致。
这时候我们可以用第三方扩展,已经对tls做了支持。
package main import ( "github.com/imroc/req/v3" ) func main() { req.DevMode() // Treat the package name as a Client, enable development mode req.MustGet("https://httpbin.org/uuid") // Treat the package name as a Request, send GET request. req.EnableForceHTTP1() // Force using HTTP/1.1 req.MustGet("https://tls.peet.ws/api/all") }
我们拿浏览器和脚本去请求https://tls.peet.ws/api/all 这个地址,查看请求的参数是否是一致的。
如果一致就标识模拟成功,另外就是请求cloudflare 需要不定时更换ip,不然即使请求成功还是会触发风控。
下面就是指纹相关信息
也可以参考这几个帖子
https://sxyz.blog/bypass-cloudflare-shield/
https://www.wuzk.ink/2024/01/16/2024/20240116/
https://blog.skyju.cc/post/tls-fingerprint-bypass-cloudflare/
评论