You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在reCAPTCHA v3重载HTTP请求中正确传入action参数

如何正确在reCAPTCHA v3重载请求中传入action参数

我用blaannk的Invisible reCAPTCHA绕过工具(通过HTTP手动重载验证码)生成v3令牌,工具本身能正常运行,但需要绑定特定页面的action(对应JS代码grecaptcha.execute({action: "GetAvailableDaysForOperation"}))。在重载请求的POST payload里加了"action": action参数后完全没效果,生成的令牌和不加该参数时一模一样。用直接HTTP重载请求时,目标服务器总是返回Error while verifying captcha,但用Selenium或Chrome控制台执行上述JS代码就能得到正确响应。

当前的get_token()函数如下:

def get_token(action):
    headers = {
        "User-Agent": "Mozilla/5.0",
        "Referer": "https://www.google.com/recaptcha/api2/anchor..."
    }
    anchorr = "https://www.google.com/recaptcha/api2/anchor..."
    keysite = anchorr.split('k=')[1].split("&")[0]
    var_co = anchorr.split("co=")[1].split("&")[0]
    var_v = anchorr.split("v=")[1].split("&")[0]
    r1 = requests.get(anchorr, headers=headers).text
    token1 = r1.split('recaptcha-token" value="')[1].split('"')[0]
    var_vh = "2283168122"
    var_bg = "..."
    payload = {
        "v": var_v,
        "reason": "q",
        "c": token1,
        "action": action, # this parameter affects nothing
        "k": keysite,
        "co": var_co,
        "hl": "en",
        "size": "invisible",
        "vh": var_vh,
        "bg": var_bg
    }
    reload_url = f"https://www.google.com/recaptcha/api2/reload?k={keysite}"
    r2 = requests.post(reload_url, data=payload, headers=headers)
    try:
        token2 = r2.text.split('"rresp","')[1].split('"')[0]
    except Exception:
        return None
    return token2

解决方法

  • 修正Referer头:当前Referer设为recaptcha的anchor页面URL,这不符合真实请求逻辑。必须改为调用grecaptcha.execute的目标页面URL,否则服务器会判定请求来源异常,忽略action参数。
  • 动态提取会话参数:不要硬编码var_vh和var_bg,从anchor页面的响应中动态提取对应的值(比如通过r1.split('data-vh="')[1].split('"')[0]获取var_vh),硬编码的值会导致会话不匹配。
  • 添加v3类型标识:在payload中新增"type": "v3"参数,明确告知服务器这是v3版本的请求,否则服务器会按v2规则处理,直接忽略action参数。
  • 核对请求结构:用Chrome开发者工具捕获浏览器执行grecaptcha.execute时的真实POST请求,对比payload中的参数、headers的细节,确保你的请求和真实请求完全一致。

修改后的示例代码:

def get_token(action):
    # 替换为目标页面的真实URL
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36",
        "Referer": "https://target-site.com/your-operation-page",
        "Content-Type": "application/x-www-form-urlencoded"
    }
    anchorr = "https://www.google.com/recaptcha/api2/anchor?k=YOUR_V3_SITE_KEY&co=..."
    keysite = anchorr.split('k=')[1].split("&")[0]
    var_co = anchorr.split("co=")[1].split("&")[0]
    var_v = anchorr.split("v=")[1].split("&")[0]
    
    r1 = requests.get(anchorr, headers=headers).text
    token1 = r1.split('recaptcha-token" value="')[1].split('"')[0]
    # 动态提取会话参数
    var_vh = r1.split('data-vh="')[1].split('"')[0]
    var_bg = r1.split('data-bg="')[1].split('"')[0]
    
    payload = {
        "v": var_v,
        "reason": "q",
        "c": token1,
        "action": action,
        "k": keysite,
        "co": var_co,
        "hl": "en",
        "size": "invisible",
        "vh": var_vh,
        "bg": var_bg,
        "type": "v3"  # 新增v3类型标识
    }
    reload_url = f"https://www.google.com/recaptcha/api2/reload?k={keysite}"
    r2 = requests.post(reload_url, data=payload, headers=headers)
    try:
        token2 = r2.text.split('"rresp","')[1].split('"')[0]
    except Exception:
        return None
    return token2

内容的提问来源于stack exchange,提问作者ExDoors

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 07:57:25