Google Apps Script中UrlFetchApp.fetch方法请求接口无返回问题求助
问题原因与解决方案
核心触发原因
- 请求头校验拦截:目标站点的反爬机制会校验请求的
User-Agent、Referer等请求头字段,Google Apps Script的UrlFetchApp默认发送的请求头不符合站点要求,会被直接拦截拒绝返回内容。而浏览器访问时会自动携带符合要求的头部信息,所以可以正常获取结果。 - IP归属拦截:目标站点可能会拦截来自云服务厂商(包括Google云)的服务器IP段的请求,你本地浏览器用的是普通民用IP,不在拦截范围内所以可以正常访问。
- 协议跳转适配问题:你当前用的是HTTP协议请求,目标站点可能存在强制HTTPS跳转规则,
UrlFetchApp的跳转逻辑在部分场景下和浏览器不一致,导致请求卡住。
修复方案
你可以尝试修改代码,优先使用HTTPS协议,同时自定义请求头模拟浏览器行为,参考代码如下:
function callNasdaqOMX() { // 配置请求参数 const requestOptions = { method: 'get', followRedirects: true, timeout: 10000, headers: { // 可替换为你自己浏览器实际的User-Agent 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36', // 配置目标站点同域的Referer,模拟从站点内发起请求 'Referer': 'https://www.nasdaqomxnordic.com/' } }; try { // 优先使用HTTPS协议发起请求 const response = UrlFetchApp.fetch("https://www.nasdaqomxnordic.com/webproxy/DataFeedProxy.aspx?SubSystem=Prices&Action=GetInstrument&Source=OMX&Instrument=SSE36273", requestOptions); // 输出返回内容测试 console.log(response.getContentText()); } catch (e) { // 捕获错误信息定位问题 console.error('请求出错:', e.toString()); } }
如果添加请求头后仍无法获取结果,基本可以确认是目标站拦截了Google云的IP段,这种情况可以尝试给请求加代理,或者改用本地运行的脚本调用该接口。
内容的提问来源于stack exchange,提问作者user3249050
相关产品推荐
相关产品推荐

