imroc / req

Simple Go HTTP client with Black Magic
https://req.cool
MIT License
4.12k stars 334 forks source link

使用ImpersonateChrome方法绕不过cf的5秒盾 #351

Closed wwangyu2 closed 3 weeks ago

wwangyu2 commented 1 month ago

完整的代码,网址是https://wilsontool.com/en-gb

运行结果: image

大佬,请问该如何写才能绕过呢

package main

import (
    "fmt"
    "log"
    "net/http"

    "github.com/imroc/req/v3"
)

func main() {
    // 创建一个HTTP客户端并使用ImpersonateChrome方法来模拟Chrome浏览器的HTTP和TLS指纹
    chromeClient := req.C().ImpersonateChrome()

    // 设置请求的 headers 和 cookies
    headers := map[string]string{
        "accept":                      "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
        "accept-language":             "zh-CN,zh;q=0.9,en;q=0.8",
        "cache-control":               "max-age=0",
        "priority":                    "u=0, i",
        "sec-ch-ua":                   `"Chromium";v="124", "Google Chrome";v="124", "Not-A.Brand";v="99"`,
        "sec-ch-ua-arch":              `"x86"`,
        "sec-ch-ua-bitness":           `"64"`,
        "sec-ch-ua-full-version":      `"124.0.6367.61"`,
        "sec-ch-ua-full-version-list": `"Chromium";v="124.0.6367.61", "Google Chrome";v="124.0.6367.61", "Not-A.Brand";v="99.0.0.0"`,
        "sec-ch-ua-mobile":            "?0",
        "sec-ch-ua-model":             `""`,
        "sec-ch-ua-platform":          `"Windows"`,
        "sec-ch-ua-platform-version":  `"19.0.0"`,
        "sec-fetch-dest":              "document",
        "sec-fetch-mode":              "navigate",
        "sec-fetch-site":              "none",
        "sec-fetch-user":              "?1",
        "upgrade-insecure-requests":   "1",
        "user-agent":                  "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36",
    }

    cookies := []*http.Cookie{
        {Name: "ARRAffinity", Value: "916b0c9bbabfe8217a4fe3e0b69b40c3672a7bf81a6c9e90e6916db91c03a9b4"},
        {Name: "ARRAffinitySameSite", Value: "916b0c9bbabfe8217a4fe3e0b69b40c3672a7bf81a6c9e90e6916db91c03a9b4"},
        {Name: "acceleratorSecureGUID", Value: ""},
        {Name: "wilsontool-cartCount", Value: ""},
        {Name: "OptanonConsent", Value: "isGpcEnabled=0&datestamp=Thu+May+09+2024+10%3A17%3A38+GMT%2B0800+(%E4%B8%AD%E5%9B%BD%E6%A0%87%E5%87%86%E6%97%B6%E9%97%B4)&version=202401.1.0&browserGpcFlag=0&isIABGlobal=false&hosts=&landingPath=https%3A%2F%2Fwilsontool.com%2Fen-gb&groups=C0001%3A1%2CC0002%3A1%2CC0003%3A1%2CC0004%3A1"},
    }

    // 使用模拟的客户端发送GET请求到指定的URL
    chromeResp, chromeErr := chromeClient.R().
        SetHeaderOrder(
            "accept",
            "accept-language",
            "cache-control",
            "priority",
            "sec-ch-ua",
            "sec-ch-ua-arch",
            "sec-ch-ua-bitness",
            "sec-ch-ua-full-version",
            "sec-ch-ua-full-version-list",
            "sec-ch-ua-mobile",
            "sec-ch-ua-model",
            "sec-ch-ua-platform",
            "sec-ch-ua-platform-version",
            "sec-fetch-dest",
            "sec-fetch-mode",
            "sec-fetch-site",
            "sec-fetch-user",
            "upgrade-insecure-requests",
            "user-agent",
        ).
        SetHeaders(headers).
        SetCookies(cookies...).
        Get("https://wilsontool.com/en-gb")
    if chromeErr != nil {
        log.Fatalf("Error with Chrome-simulated request: %v", chromeErr)
    }
    fmt.Println("Chrome Simulated Client Response:")
    fmt.Println(chromeResp)
}
imroc commented 1 month ago

5 秒盾是通过运行 js 校验的,req 做不了

wwangyu2 commented 1 month ago

5 秒盾是通过运行 js 校验的,req 做不了

感谢大佬回答,不过我有一个疑问:不知道怎么回事,使用python请求不会遇到403,使用req请求报403错误, 代码和图片报错在这个issues里面:https://github.com/imroc/req/issues/354