在Autodesk Tandem中用JavaScript发送JSON POST请求遇禁止错误
解决Autodesk Tandem API请求Forbidden错误
问题核心
你的Postman能成功请求,是因为Postman自动识别了URL里的https://:nYjvNhH3TKODSJuWL-0MTQ@...格式——这是HTTP Basic认证的写法,Postman会自动把后面的凭证转换成对应的Basic Auth请求头。但你在JavaScript代码里错误地用了Bearer格式的Authorization头,导致服务端拒绝请求。
修正方案
方案1:直接使用带认证信息的URL
不需要手动添加Authorization头,直接用原始的完整URL即可,fetch会自动处理URL里的认证信息:
const url = "https://:nYjvNhH3TKODSJuWL-0MTQ@tandem.autodesk.com/api/v1/timeseries/models/urn:adsk.dtm:LudKiyWAQcCPqK2gQWxNfw/streams/AQAAAMTWX-rTaksXg95DuoCDE6UAAAAA"; const data = [ { Temperature: 25 }, ]; fetch(url, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify(data), }) .then((response) => { const contentType = response.headers.get("content-type"); return contentType && contentType.includes("application/json") ? response.json() : response.text(); }) .then((data) => { console.log("Success:", data); }) .catch((error) => { console.error("Error:", error); });
方案2:手动添加Basic Auth请求头
把URL里的凭证nYjvNhH3TKODSJuWL-0MTQ(注意前面的冒号也要保留,即:nYjvNhH3TKODSJuWL-0MTQ)转换成Base64编码,然后生成Basic Auth头:
const url = "https://tandem.autodesk.com/api/v1/timeseries/models/urn:adsk.dtm:LudKiyWAQcCPqK2gQWxNfw/streams/AQAAAMTWX-rTaksXg95DuoCDE6UAAAAA"; const authToken = btoa(":nYjvNhH3TKODSJuWL-0MTQ"); const data = [ { Temperature: 25 }, ]; fetch(url, { method: "POST", headers: { "Content-Type": "application/json", "Authorization": `Basic ${authToken}` }, body: JSON.stringify(data), }) .then((response) => { const contentType = response.headers.get("content-type"); return contentType && contentType.includes("application/json") ? response.json() : response.text(); }) .then((data) => { console.log("Success:", data); }) .catch((error) => { console.error("Error:", error); });
额外注意点
- 你的原始代码里未定义
url变量,修正后的代码已补全 - 不要把敏感的认证凭证暴露在前端代码中,存在安全风险,建议通过后端代理请求
内容的提问来源于stack exchange,提问作者james
相关产品推荐
相关产品推荐

