You need to enable JavaScript to run this app. Google Apps Script中UrlFetchApp.fetch()自2021.4.27突现4秒超时、校网抓取失败
优惠活动
大模型
产品
解决方案
定价
更多

Google Apps Script中UrlFetchApp.fetch()自2021.4.27突现4秒超时、校网抓取失败

核心结论

这个异常大概率不是Google主动的访问策略拦截,对应2021年4月底的时间点,绝大多数同类故障的原因是:Google Apps Script(以下简称GAS)在该时间点更新了全部出站请求的IP段,而你校网站的防火墙/WAF设备未同步放行新的IP段,直接静默丢弃了所有来自GAS IP段的请求。
你提到的“脚本运行仅4秒就触发超时”的特征完全匹配这类拦截的表现:请求在TCP连接阶段就被设备直接丢弃,本地等待2次TCP重传后就会触发超时,不会等到GAS默认的30秒请求超时阈值;而Postman走的是你本地/Postman服务的合法IP,不在学校的拦截名单内,因此可以正常访问。同期大量教育机构的WAF也上线了公有云IP段默认拦截规则,即使Google没有主动调整策略,学校侧的规则升级也会导致这类跨环境访问故障。

可落地的排查验证步骤
  • 第一步:确认GAS出站IP是否被拦截
    运行以下测试代码,获取当前GAS实际发出请求的公网IP:
    function getGasOutboundIp() {
      const res = UrlFetchApp.fetch("可返回当前请求公网IP的公开服务地址", {muteHttpExceptions: true});
      console.log(res.getContentText());
    }
    
    把拿到的IP发给学校IT部门,确认该IP是否在网站的拦截名单中。
  • 第二步:验证UA拦截规则
    GAS的UrlFetchApp默认请求头会携带Google-Apps-Script相关的UA标识,部分学校的WAF会在同期新增爬虫UA拦截规则,同样会静默丢包。可以把请求UA替换成你Postman测试时用的UA字符串,再重试请求:
    function testWithCustomUA() {
      const schoolUrl = "你要访问的学校域名地址";
      const options = {
        headers: {
          "User-Agent": "替换成你Postman里看到的UA完整字符串"
        },
        muteHttpExceptions: true,
        timeout: 30000
      }
      const res = UrlFetchApp.fetch(schoolUrl, options);
      console.log(res.getResponseCode(), res.getContentText().slice(0, 200));
    }
    
  • 第三步:排除域名层面的访问限制
    先请求学校域名下的公开静态资源(比如站点的favicon文件)测试,如果连静态资源都无法抓取,基本可以确定是IP/UA层面的拦截,不存在域名被Google拉黑的情况。
临时解决方案

如果暂时联系不到学校IT加白,可以在GAS请求中配置第三方转发代理,把请求通过你本地/其他未被学校拦截的服务器转发到学校网站,绕过GAS的出站IP段限制。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.22 17:06:04