在使用Google Apps Script的 UrlFetchApp从网站获取PDF文件时出现错误
我有一个Google Apps Script,它每天从一个公开的金融网站下载PDF费率表。这个脚本已经正常运行了好几个月,但在大约4 月9 日左右突然停止工作。
本来应该返回 application/pdf 文件,现在 UrlFetchApp 返回的是一个 text/html 文件。
下面是我的最小可复现代码:
function testDownload() {
var url = "https://www.sbp.org.pk/ecodata/rates/war/2026/May/05-May-26.pdf";
var options = {
muteHttpExceptions: true,
headers: {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"
}
};
var response = UrlFetchApp.fetch(url, options);
Logger.log("MimeType: " + response.getBlob().getContentType());
Logger.log("Content: " + response.getContentText().substring(0, 300));
}
输出 / 错误:
The MimeType 的日志显示为 text/html。The getContentText() 返回了这个Cloudflare阻止页面:
<html><body>
<h1>Access Denied</h1><p>Signature ID: 1002000251<br>Message ID: 2360628808<br>Client IP: 104.22.1.181</p>
<script defer src="https://static.cloudflareinsights.com/beacon.min.js..."
到目前为止我的评估:
看起来对方把他们的网站放在Cloudflare的 Web应用防火墙(WAF)之后。因为 UrlFetchApp 来自Google's Data Center IP,Cloudflare将其标记为机器人并在请求到达该文件之前就拦截。
我的问题:
- 是否有任何原生方法仅使用
UrlFetchApp参数(如特定头信息或cookies)来绕过这个Cloudflare阻止? - 如果原生绕过由于Google的 IP被 WAF列入黑名单而不可行,获取这个PDF的最佳架构是什么?我需要通过抓取API或代理来路由吗?
解决方案
我可以确认这是Cloudflare的 Bot Management系统在阻止Google Apps Script的请求——Google的数据中心IP范围被广泛标记为自动化流量,任意数量的头信息调整都无法绕过它们的JavaScript挑战。
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。