问题描述
根据我是GET还是POST,我会遇到两个不同的错误,但是我的Autodesk代表向我保证,使用邮递员(而非javascript)资源确实存在,并且他可以获取身份验证令牌。
如果我这样做:
var url = "https://developer.api.autodesk.com/authentication/v1/authenticate";
var options = {
"method": "GET","headers":{"Content-Type": "application/x-www-form-urlencoded",},"body": {
"client_id" : "Z---F","client_secret" : "m---8","grant_type": "client_credentials","scope": "data:read"
}
}
;
console.log(url);
console.log("Options:\n"+JSON.stringify(options));
var res = UrlFetchApp.fetch(url,options).getContentText();
Logger.log(res);
}
我明白了
异常:https://developer.api.autodesk.com的请求失败,返回了代码404。服务器被截断>响应:{“ developerMessage”:“所请求的资源不存在。”,“ moreInfo”:> https://forge.autodesk。 com / en / docs / oauth / v2 / developers_guide / error_hand ...(使用MutantHttpExceptions>选项检查完整响应)
如果我愿意
var url = "https://developer.api.autodesk.com/authentication/v1/authenticate";
var options = {
"method": "POST",options).getContentText();
Logger.log(res);
}
我明白了
异常:https://developer.api.autodesk.com的请求失败,返回了代码400。截断的服务器>响应:{“ developerMessage”:“请求中不存在所需的参数client_id,client_secret,grant_type”,“ errorCode” :“ AUTH-008”,“更多信息”:“ h ...(使用MutantHttpExceptions选项检查完整的>响应)
有人想为什么会说不存在的资源呢?这里没有个人信息,因此,无论他是在做我还是在做我,这都不重要。我在该问题上能找到的所有帖子都是在处理此调用的curl版本,而不是处理带有选项包的javascript
解决方法
URL绝对有效(此端点的API reference),因此,我建议调试发出请求的实际代码,例如:
- 调试
UrlFetchApp
类(它来自btw吗?)及其fetch
方法,确保没有修改您传入的url
- 如果代码在浏览器中运行,请尝试查看DevTools Network tab并查看请求是否实际发送到
https://developer.api.autodesk.com/authentication/v1/authenticate
- 如果代码在浏览器中运行,请尝试使用内置的Fetch API
此外,我不确定这是否是UrlFetchApp
自动处理的事情,但是将请求的内容类型指定为application/x-www-form-urlencoded
,然后将JSON对象作为正文传递了看起来不错。如您在documentation中所见,请求正文应更像这样:
client_id=<your client id>&
client_secret=<your client secret>&
grant_type=client_credentials&
scope=data:read