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

Google Apps Script调用UrlFetchApp.fetch遇Cloudflare 403验证挑战

问题分析与解决方法

可能遗漏的配置点

Cloudflare的人机验证不止检查User-Agent,还会通过多维度指纹识别请求是否来自自动化工具,你遇到的差异主要源于以下几点:

  • 会话Cookie缺失:本地Python请求或浏览器访问时,会自动保留Cloudflare生成的会话Cookie(如cf_clearance、__cfduid),这些Cookie是通过验证后的信任标识;而GAS的UrlFetchApp每次请求都是全新会话,没有携带这类Cookie,直接触发验证。
  • 请求头不完整:Python的requests库会默认携带一系列标准请求头(如Accept、Accept-Language、Accept-Encoding等),而UrlFetchApp的默认请求头相对精简,缺失的头信息会被Cloudflare判定为非正常浏览器请求。
  • IP特征差异:GAS的请求来自Google云服务器IP段,这类IP常被Cloudflare标记为高风险爬虫IP池;而本地IP属于普通用户网段,更容易通过基础验证。
  • 行为模式差异:如果GAS请求是定时触发或批量执行,行为频率和模式更符合爬虫特征,会被Cloudflare的防护机制拦截。

可行的解决思路

  • 补充完整请求头:复制本地requests请求中的所有请求头到GAS的配置里,模拟真实浏览器请求。示例代码:
    const targetUrl = 'https://fiis.com.br/btal11/';
    const requestOptions = {
      headers: {
        'User-Agent': '你的本地UA内容',
        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
        'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8',
        'Accept-Encoding': 'gzip, deflate, br',
        'Referer': 'https://fiis.com.br/',
        'Connection': 'keep-alive',
        'Upgrade-Insecure-Requests': '1'
      },
      followRedirects: true,
      muteHttpExceptions: true
    };
    const response = UrlFetchApp.fetch(targetUrl, requestOptions);
    
  • 尝试复用会话Cookie:在本地浏览器手动访问目标页面,获取cf_clearance和__cfduid Cookie值,添加到GAS的请求头中。注意这类Cookie绑定IP和有效期,IP变更或过期后会失效,只能临时解决问题。
  • 优先使用官方API:查询该网站是否提供公开API接口获取数据,这是最稳定合规的方式,无需绕过Cloudflare验证。
  • 调整请求频率:如果是批量或定时请求,降低频率,模拟普通用户的访问节奏,减少被判定为爬虫的概率。

内容的提问来源于stack exchange,提问作者Vini.g.fer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 11:31:34