JavaScript Ajax转Google Script UrlFetchApp调用Sizmek API遇未授权错误
问题:Google Script调用Sizmek广告套件API出现未授权错误
我需要在Google Script中调用Sizmek广告套件API获取数据,以下是JavaScript环境下的Ajax调用示例:
var settings = { "url": "https://adapi.uat.sizmek.com/sas/login/login", "method": "POST", "timeout": 0, "headers": { "Content-Type": "application/json", "api-key": "api key token", "": "" }, "data": "{username:\"Username\", password: \"Password\"}", }; $.ajax(settings).done(function(response) { console.log(response); });
参考官方文档后,我将其转换为Google Script的UrlFetchApp代码,但运行后出现未授权错误:
const API_KEY = '[api token]'; var url = 'https://adapi.sizmek.com/sas/login/login/' // Make a POST request with a JSON payload. var data = { 'username': '[username]', 'password': '[password]', }; var options = { 'method' : 'post', 'contentType': 'application/json', "headers":{ Authorization: API_KEY }, "payload": JSON.stringify(data), 'muteHttpExceptions': true }; var response = UrlFetchApp.fetch(url, options);
解决方案
出现未授权错误的核心问题有两个:
- 请求头字段不匹配:原Ajax示例中使用
api-key作为API密钥的请求头字段,但你在Google Script代码里错误写成了Authorization,Sizmek的认证接口仅识别api-key这个头字段。 - 环境URL不对应:原Ajax使用的是UAT测试环境地址(
https://adapi.uat.sizmek.com),但你的Google Script用了正式环境地址(https://adapi.sizmek.com),如果你的API密钥属于测试环境,调用正式环境会直接认证失败。
另外补充一个细节优化:请求头的键名建议用引号包裹,避免潜在的语法解析问题。
修正后的代码如下:
const API_KEY = '[你的API密钥]'; // 根据密钥所属环境选择URL:测试环境保留uat,正式环境去掉uat var url = 'https://adapi.uat.sizmek.com/sas/login/login'; var data = { 'username': '[你的用户名]', 'password': '[你的密码]', }; var options = { 'method' : 'post', 'contentType': 'application/json', "headers":{ "api-key": API_KEY // 修正为正确的头字段名 }, "payload": JSON.stringify(data), 'muteHttpExceptions': true }; var response = UrlFetchApp.fetch(url, options); // 打印响应内容方便排查问题 console.log(response.getContentText());
额外排查点:
- 确认API密钥、用户名、密码与所使用的环境(测试/正式)完全匹配
- 移除URL末尾多余的斜杠,避免触发301重定向影响认证流程
内容的提问来源于stack exchange,提问作者Bohdan V.
相关产品推荐
相关产品推荐

