Google Apps Script调用UrlFetchApp获取GST验证页面遭429错误
解决Google Apps Script请求Signalx GST验证页面返回429错误的方案
核心问题原因
网站通过请求头识别出请求来自非浏览器环境(Google Apps Script默认请求标识),触发了频率限制。以下是针对性解决步骤:
1. 模拟浏览器请求头
为请求添加浏览器User-Agent标识,让网站判定请求来自正常浏览器:
function get_gst_addrss(){ var url = "https://app.signalx.ai/gstin-verification/33ABBCS1600H1ZY"; var options = { headers: { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36" } }; var websiteContent = UrlFetchApp.fetch(url, options).getContentText(); Logger.log(websiteContent); }
2. 启用异常静默查看完整响应
添加muteHttpExceptions选项,获取服务器返回的完整错误信息,辅助排查限制规则:
function get_gst_addrss(){ var url = "https://app.signalx.ai/gstin-verification/33ABBCS1600H1ZY"; var options = { headers: { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36" }, muteHttpExceptions: true }; var response = UrlFetchApp.fetch(url, options); Logger.log("响应状态码:" + response.getResponseCode()); Logger.log("完整响应内容:" + response.getContentText()); }
3. 添加指数退避重试机制
针对临时频率限制,通过指数退避的重试策略绕过限制:
function get_gst_addrss(){ var url = "https://app.signalx.ai/gstin-verification/33ABBCS1600H1ZY"; var maxRetries = 3; var retryDelay = 1000; // 初始延迟1秒 var options = { headers: { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36" }, muteHttpExceptions: true }; for(var i = 0; i < maxRetries; i++){ var response = UrlFetchApp.fetch(url, options); var code = response.getResponseCode(); if(code === 200){ Logger.log("请求成功:" + response.getContentText()); return; } else if(code === 429){ Logger.log(`第${i+1}次请求触发限制,等待${retryDelay/1000}秒后重试`); Utilities.sleep(retryDelay); retryDelay *= 2; // 指数退避,每次延迟翻倍 } else { Logger.log(`请求失败,状态码:${code}`); return; } } Logger.log("重试次数耗尽,无法获取内容"); }
4. 提取目标字段并写入表格
成功获取页面后,用正则表达式提取所需字段并写入Google表格:
function get_gst_addrss(){ var url = "https://app.signalx.ai/gstin-verification/33ABBCS1600H1ZY"; var options = { headers: { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36" } }; var websiteContent = UrlFetchApp.fetch(url, options).getContentText(); // 提取Legal Name of Business var legalNameMatch = websiteContent.match(/Legal Name of Business.*?<span[^>]*>([^<]+)<\/span>/i); var legalName = legalNameMatch ? legalNameMatch[1].trim() : "未找到"; // 提取Principal Place of Business var principalAddrMatch = websiteContent.match(/Principal Place of Business.*?<span[^>]*>([^<]+)<\/span>/i); var principalAddr = principalAddrMatch ? principalAddrMatch[1].trim() : "未找到"; Logger.log(`Legal Name of Business: ${legalName}`); Logger.log(`Principal Place of Business: ${principalAddr}`); // 写入到Google表格指定单元格 var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); sheet.getRange("A1").setValue(legalName); sheet.getRange("B1").setValue(principalAddr); }
内容的提问来源于stack exchange,提问作者arul selvan
相关产品推荐
相关产品推荐

