在Google Apps Script中调用SensorPush API获取授权令牌遇认证缺失错误
解决SensorPush API获取授权令牌的问题
错误原因
你当前的代码只发送了一个不带任何认证信息的GET请求,而SensorPush的/oauth/authorize接口需要通过POST请求传递用户名和密码,同时设置正确的请求头,所以才会返回「缺少认证令牌」的400错误。
修正后的代码
function restAPI() { var scriptProperties = PropertiesService.getScriptProperties(); var username = scriptProperties.getProperty("username"); var password = scriptProperties.getProperty("password"); // 配置请求参数:POST方法,携带JSON格式的认证信息 var options = { 'method': 'post', 'contentType': 'application/json', 'muteHttpExceptions': true, 'payload': JSON.stringify({ "email": username, "password": password }) }; var url = 'https://api.sensorpush.com/api/v1/oauth/authorize'; var response = UrlFetchApp.fetch(url, options); var responseData = JSON.parse(response.getContentText()); Logger.log("授权响应:" + JSON.stringify(responseData, null, 2)); // 如果成功获取令牌,可将其存入ScriptProperties供后续接口调用使用 if (responseData.token) { scriptProperties.setProperty("sensorpush_token", responseData.token); Logger.log("令牌已保存"); } }
关键修改点说明
- 设置
method: 'post':该接口仅接受POST请求,默认GET请求会直接触发认证错误 - 添加
contentType: 'application/json':明确告知服务器请求体为JSON格式 - 在
payload中用JSON.stringify将用户名密码转为JSON字符串,接口要求用email和password字段传递认证信息 - 解析响应内容便于查看结果,同时支持将令牌持久化存储,避免重复登录
后续接口调用示例(使用令牌)
获取到令牌后,调用SensorPush其他API时需在请求头中携带令牌,示例如下:
function getSensorList() { var scriptProperties = PropertiesService.getScriptProperties(); var token = scriptProperties.getProperty("sensorpush_token"); var options = { 'headers': { 'Authorization': 'Bearer ' + token }, 'muteHttpExceptions': true }; var url = 'https://api.sensorpush.com/api/v1/sensors/list'; var response = UrlFetchApp.fetch(url, options); Logger.log(response.getContentText()); }
内容的提问来源于stack exchange,提问作者Omri Saporta
相关产品推荐
相关产品推荐

