Google AppScript传递API Header Token遇401认证错误求助
问题分析与解决方案
核心错误点
- 变量顺序倒置:调用
UrlFetchApp.fetch()时,请求配置对象还未定义,导致请求完全没携带认证头,直接触发401错误。 - GET请求错误携带body:GET请求规范里通常不需要body,Postman正常调用时应该也没传body,这里多余的body会干扰API的认证逻辑。
- Authorization头格式可能不规范:JWT Token必须遵循
Bearer <token>的格式,若直接写Token内容不加Bearer前缀,API会判定为无效认证。
修正后的代码
function onOpen() { var ui = SpreadsheetApp.getUi(); ui.createMenu('Custom Rupeek Menu') .addItem('Get Ref ID','displayrefid') .addToUi(); } // 调用Rupeek API的函数 function callrpkAPI(rpk) { var url = 'api url'; // 替换为实际完整API地址 // 先定义请求配置,再发起请求 var requestOptions = { "method": "get", "headers": { // 严格遵循Bearer + 空格 + Token的格式 "Authorization": "Bearer YOUR_ACTUAL_JWT_TOKEN", "Accept": "application/json" }, "contentType": "application/json" // GET请求移除多余的body参数 }; var response = UrlFetchApp.fetch(url, requestOptions); var json = response.getContentText(); return JSON.parse(json); } function displayrefid() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getActiveSheet(); var ref = sheet.getRange(4,2).getValue(); var id = callrpkAPI(ref); var results = id["results"]; // 处理结果为可写入表格的二维数组 var output = []; if (results && Array.isArray(results)) { results.forEach(item => { // 根据API实际返回的字段结构调整 output.push([item.refId]); }); } // 清除历史结果并写入新数据 sheet.getRange(15,1, sheet.getLastRow()-14, 1).clearContent(); if (output.length > 0) { sheet.getRange(15,1, output.length, 1).setValues(output); } }
额外检查项
- 确认Token未过期:Postman正常调用可能是因为Token仍在有效期,AppScript中使用的Token可能已失效,重新生成有效Token测试。
- 验证API URL完整性:确保
url是完整的HTTPS地址(如https://api.rupeek.com/your-endpoint),避免相对路径导致请求地址错误。 - 对齐Postman请求头:对比Postman的请求头列表,确保AppScript中的
Accept等头与Postman完全一致,无多余或缺失字段。
内容的提问来源于stack exchange,提问作者Saswat Mishra
相关产品推荐
相关产品推荐

