Google Script UrlFetch PUT请求调用Guesty API失败求助
问题排查与修正方案
核心错误点
- 请求体结构错误:Guesty API要求
customFields是数组类型,你的代码里误写成了单个对象,与CURL示例的格式不匹配。 - 缺失关键请求头:PUT请求必须指定
Content-Type: application/json,否则UrlFetchApp会默认使用application/x-www-form-urlencoded格式,导致API无法解析请求体。 - Authorization格式验证:确保单元格A18中的token是
Bearer XXXXXX的完整格式(包含Bearer前缀和空格)。
修正后的完整代码
function putlistingcustomfield (){ var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getSheetByName('get_token'); var code = sheet.getRange("A18").getValue(); const myHeaders2 = { Accept: 'application/json', Authorization: code, 'Content-Type': 'application/json' // 添加缺失的请求头 }; // 修正customFields为数组结构,匹配API要求 var data = { 'customFields': [ { 'fieldId': '639cdb92e128c3002a11b186', 'value': 'test' } ] }; const options = { method: 'PUT', headers: myHeaders2, followRedirects: true, payload: JSON.stringify(data), muteHttpExceptions: true // 强制返回错误响应,方便排查问题 }; const url = 'https://open-api.guesty.com/v1/listings/XXXXXX/custom-fields'; let response2 = UrlFetchApp.fetch(url, options); Logger.log(response2.getContentText()); // 输出完整响应文本便于调试 var sheet2 = ss.getSheetByName('write'); var cell2 = sheet2.getRange("A10"); cell2.setValue(response2.getContentText()); };
额外调试建议
- 启用
muteHttpExceptions: true后,即使API返回4xx/5xx错误,也能获取到具体的错误提示,可根据提示进一步排查权限、listing ID有效性等问题。 - 执行代码后查看日志中的响应内容,若仍有错误,可对照Guesty API文档的错误码说明调整请求参数。
内容的提问来源于stack exchange,提问作者Paul Detrier
相关产品推荐
相关产品推荐

