Google Apps Script Postman请求返回HTML而非JSON问题排查
问题根因
Postman请求返回HTML而非预期JSON,由两个常见问题导致:
- Web App访问权限配置不当,未携带有效身份凭证的请求会被Google重定向到账号登录页面,返回内容为登录页HTML
- 响应未配置跨域允许头,非浏览器环境的请求可能被拦截,返回默认错误HTML页
修复方案
1. 调整Web App部署配置
- 点击编辑器右上角「部署」-「管理部署」,选择新建版本
- 「执行身份」选择我自己
- 「谁有权访问」选项,若需要公开调用接口选择任何人(含匿名用户);如果需要限制访问,Postman请求时必须携带对应权限的OAuth2令牌,否则会被重定向
- 完成部署后复制新版本的Web App URL,旧版本URL不会加载修改后的代码
注意:如果选择了匿名访问权限,首次在浏览器打开新部署的URL时,需要按提示完成授权确认,之后接口才会正常响应。
2. 修正代码逻辑
原有代码逻辑基本正确,只需要补全跨域响应头,去掉冗余的返回逻辑即可,修改后完整代码如下:
const doGet = (e) => { return getPictures(); } const getPictures = () => { const destination_id = 'FOLDER FILE ID'; // 替换为实际目标Google Drive文件夹ID const destination = DriveApp.getFolderById(destination_id); const files = destination.getFiles(); const file_array = []; while (files.hasNext()) { let file = files.next(); let src = "https://drive.google.com/uc?export=view&id=" + file.getId() file_array.push({ "src": src, "height": randomInteger(3,6), "width": randomInteger(3,6) }); } const output = ContentService.createTextOutput(JSON.stringify(file_array)) .setMimeType(ContentService.MimeType.JSON); // 配置跨域允许头,适配工具类请求 output.headers = { "Access-Control-Allow-Origin": "*" }; return output; } const randomInteger = (min, max) => { return Math.floor(Math.random() * (max - min + 1)) + min; }
3. Postman侧测试注意事项
- 测试时关闭Postman的自动Cookie携带功能,避免残留的Google账号Cookie干扰鉴权
- 请求方法选择GET,不要加多余的请求头、请求体,直接访问部署后的URL即可拿到JSON响应
内容的提问来源于stack exchange,提问作者SpicyyRiice
相关产品推荐
相关产品推荐

