Google Apps Script用UrlFetchApp访问sullygnome.com报地址不可用错误求解
问题原因
sullygnome网站屏蔽了Google Apps Script的UrlFetch服务的出口IP段,或是拦截了未携带标准浏览器请求头的爬虫请求;而Google Sheets的IMPORTXML服务使用的是独立的出口节点,因此公式可以正常运行,GAS直接请求会报错。
解决方案
方案1:给UrlFetch请求添加完整浏览器请求头
多数站点会拦截没有标准请求头的爬虫请求,你可以先尝试携带模拟浏览器的头信息发起请求,示例代码如下:
function parseXml() { let url = "https://sullygnome.com/channel/xqcow/30"; // 配置请求参数,模拟Chrome浏览器请求 let options = { headers: { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36", "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8", "Accept-Language": "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3", "Referer": "https://sullygnome.com/" }, muteHttpExceptions: true }; let response = UrlFetchApp.fetch(url, options); Logger.log("响应状态码:" + response.getResponseCode()); let data = response.getContentText(); Logger.log(data); }
运行后如果状态码返回200即请求成功,如果返回403/503类错误则说明GAS的IP段被站点屏蔽。
方案2:直接读取Google Sheets公式的返回结果(最便捷)
你原本的IMPORTXML公式可以正常运行,直接把公式写在指定单元格(比如Sheet1的A1),再用GAS读取单元格值即可,不需要单独发起请求:
function getStatValue() { // 替换为你自己的工作表和对应单元格位置 let sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1"); let statValue = sheet.getRange("A1").getValue(); Logger.log(statValue); }
方案3:使用中转服务发起请求
如果以上两种方案不符合你的需求,可以自行搭建简单的中转接口,用自己的服务器/云函数发起对sullygnome的请求,再将结果返回给GAS,避开GAS的IP段限制。
内容的提问来源于stack exchange,提问作者Maor U
相关产品推荐
相关产品推荐

