Chrome扩展调用谷歌API时GET请求正常POST返回401如何解决
问题根因
Google Sheets API 的 API Key 仅支持只读权限的公共资源访问,你GET请求能成功是因为对应电子表格设置了「任何人只要有链接即可查看」的公开权限,仅读取操作不需要额外的身份授权。但追加/修改数据属于写入操作,仅靠API Key无法完成身份校验和权限验证,因此返回401未授权错误。
需要补充的配置项
- 更换认证方式:写入操作必须使用 OAuth 2.0 授权,你需要在Chrome扩展的
manifest.json中声明oauth2权限,配置Google Cloud项目对应的客户端ID,同时申请https://www.googleapis.com/auth/spreadsheets的接口作用域,完成用户授权后获取访问令牌(access token)。 - 补充请求头配置:在fetch的请求参数中添加
headers字段,将授权得到的access token放入授权头,同时声明请求体格式:
let fetch_options = { "method": "POST", "headers": { "Authorization": `Bearer ${ACCESS_TOKEN}`, "Content-Type": "application/json" }, "body": JSON.stringify({ "values": [ ["Door", "$15", "2", "3/15/2016"], ["Engine", "$100", "1", "3/20/2016"], ] }) };
- 修正接口请求URL:Append接口必须携带必填查询参数
valueInputOption(可选值为RAW/USER_ENTERED,RAW表示直接写入原始内容,USER_ENTERED会按照用户手动输入的规则自动解析数字、日期格式),使用OAuth认证后不需要再携带API Key,正确的URL格式如下:
let fetch_url = `https://sheets.googleapis.com/v4/spreadsheets/${spreadsheetId}/values/Teachers!A7:D8:append?valueInputOption=USER_ENTERED`;
内容的提问来源于stack exchange,提问作者Mike Harb
相关产品推荐
相关产品推荐

