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

Google Apps Script中UrlFetchApp获取RSS时如何清除/规避缓存?

解决Google Apps Script中UrlFetchApp抓取RSS的缓存问题

问题重现

脚本从Google Sheet读取RSS地址,对比GUID检测新文章并推送到Google Chat,但UrlFetchApp频繁返回旧版RSS内容:

  • 新内容发布后需等待45-60分钟才偶尔能抓取到新版本
  • 日志显示lastBuildDate在新旧值之间交替:
    11 Jun 2024, 15:37:05  =>  lastBuildDate : Mon, 10 Jun 2024 13:06:32 +0000
    11 Jun 2024, 15:39:21  =>  lastBuildDate : Tue, 11 Jun 2024 12:46:24 +0000
    11 Jun 2024, 15:49:28  =>  lastBuildDate : Mon, 10 Jun 2024 13:06:32 +0000
    

已尝试的方法无效:

  • 重置xml/document变量
  • 添加多种Cache-Control头部
  • URL后加时间戳参数

针对性解决方法

1. 启用UrlFetchApp官方缓存禁用选项

Google Apps Script的UrlFetchApp.fetch支持cache: false参数,直接禁用Google服务器端的请求缓存,这是最核心的解决手段:

var fetchOptions = {
  "method": "GET",
  "contentType": "application/xml",
  "muteHttpExceptions": true,
  "followRedirects": true,
  "cache": false, // 禁用Google中间层缓存
  headers : {
    'Cache-Control': 'no-cache, no-store, must-revalidate',
    'Pragma': 'no-cache',
    'Expires': '0',
    'Accept': 'application/xml, application/rss+xml, */*',
    'Accept-Encoding': 'gzip, deflate, br'
  }
}

2. 修正请求头错误并强化缓存控制

  • 修复之前的Accept-Encoging拼写错误(应为Accept-Encoding),否则该头部会失效
  • 组合使用no-cache/no-store/must-revalidate指令,同时添加Pragma和Expires字段兼容旧版服务器

3. 移除异步请求选项

async: true是UrlFetchApp的实验性特性,异步模式下缓存机制不稳定,脚本通过触发器运行无需异步,直接移除该选项或设为false:

var fetchOptions = {
  "async": false, // 禁用异步请求
  // ...其他配置项
}

4. 优化URL缓存破防参数

使用更明确的参数名避免与RSS源自身参数冲突,直接用时间戳确保每次请求URL唯一:

var url = FEED_URL + "?cache_bust=" + new Date().getTime();

5. 验证RSS源自身缓存

如果以上方法仍无效,手动用curl测试请求(携带相同缓存禁用头):

curl -H "Cache-Control: no-cache, no-store, must-revalidate" -H "Pragma: no-cache" -H "Expires: 0" YOUR_RSS_FEED_URL

若手动请求也返回旧内容,说明是RSS源自身的CDN/服务器缓存问题,需联系源站调整缓存策略。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 10:55:08