Javascript Google应用程序脚本中的API Post请求不工作

Javascript Google应用程序脚本中的API Post请求不工作,javascript,google-apps-script,postman,Javascript,Google Apps Script,Postman,我设法通过Postman完成了API POST请求,但一旦为Google应用程序脚本进行了修改,它就不起作用了。我认为这可能与正文格式有关,我无法在GAS中复制新的URLSearchParams对象,我相信我正在发送一个JSON 谢谢 邮递员工作-JavaScript获取 var myHeaders = new Headers(); myHeaders.append("Content-Type", "application/x-www-form-urlencoded

我设法通过Postman完成了API POST请求,但一旦为Google应用程序脚本进行了修改,它就不起作用了。我认为这可能与正文格式有关,我无法在GAS中复制新的URLSearchParams对象,我相信我正在发送一个JSON

谢谢

邮递员工作-JavaScript获取

var myHeaders = new Headers();
myHeaders.append("Content-Type", "application/x-www-form-urlencoded");

var urlencoded = new URLSearchParams();
urlencoded.append("client_id", "XXXX");
urlencoded.append("client_secret", "XXXX");
urlencoded.append("grant_type", "client_credentials");

var requestOptions = {
  method: 'POST',
  headers: myHeaders,
  body: urlencoded,
  redirect: 'follow'
};

fetch("https://apigateway.criteo.com/oauth2/token", requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));
卷曲

我的错误气体版本:

function getCostAU() {
  
  var myHeaders = {"Accept": "application/json",
                   "Content-Type": "application/x-www-form-urlencoded"};
  
  var myPayload = {"client_id" : "XXXX",
                   "client_secret" : "XXXX",
                   "grant_type" : "client_credentials"};
  
  var requestOptions = {
    method: 'POST',
    headers: myHeaders,
    body: myPayload,
    redirect: 'follow',
  };
    
  var url = "https://apigateway.criteo.com/oauth2/token";
  var result = JSON.parse(UrlFetchApp.fetch(url, requestOptions).getContentText());
  var access_token = result.access_token;
};
问题: 身体是。您应该使用有效负载

重定向不是选项参数中的有效键

当前,应用程序脚本中不支持

解决方案: 将车身更换为有效载荷

将有效负载对象重新创建为查询字符串。例如,有效负载:{x:1,y:2}应该更改为x=1&y=2

片段: 要查询参数的有效负载对象: 函数objectToQueryParamsobj{ 回来 Object.entriesobj .map[k,v]=>`${encodeURIComponentk}=${encodeURIComponentv}` .加入“&” ; } const myPayload={client_id:XXXX, 客户机密:XXXX, 授予\类型:客户端\凭据}; console.logobjectToQueryParamsmyPayload;问题: 身体是。您应该使用有效负载

重定向不是选项参数中的有效键

当前,应用程序脚本中不支持

解决方案: 将车身更换为有效载荷

将有效负载对象重新创建为查询字符串。例如,有效负载:{x:1,y:2}应该更改为x=1&y=2

片段: 要查询参数的有效负载对象: 函数objectToQueryParamsobj{ 回来 Object.entriesobj .map[k,v]=>`${encodeURIComponentk}=${encodeURIComponentv}` .加入“&” ; } const myPayload={client_id:XXXX, 客户机密:XXXX, 授予\类型:客户端\凭据}; console.logobjectToQueryParamsmyPayload 回答:只要把车身换成有效载荷就足够了

函数objectToQueryParamsobj{ 回来 Object.entriesobj .map[k,v]=>`${encodeURIComponentk}=${encodeURIComponentv}` .加入“&” ; } const myPayload={client_id:XXXX, 客户机密:XXXX, 授予\类型:客户端\凭据}; console.logobjectToQueryParamsmyPayload 回答:只要把车身换成有效载荷就足够了

函数objectToQueryParamsobj{ 回来 Object.entriesobj .map[k,v]=>`${encodeURIComponentk}=${encodeURIComponentv}` .加入“&” ; } const myPayload={client_id:XXXX, 客户机密:XXXX, 授予\类型:客户端\凭据};
console.logobjectToQueryParamsmyPayload;这回答了你的问题吗?如果是这样的话,考虑一下投票结果吧。您的意思是可以使用encodeURIComponent在GAS中复制URLSearchParams对象?这是否回答了您的问题?如果是这样的话,考虑一下投票结果吧。您的意思是可以使用encodeURIComponent在GAS中复制URLSearchParams对象?在OP的情况下,值以表单形式发送。因此,我认为在您的脚本中,payload:objectToQueryParamsmyPayload可以修改为payload:myPayload。在UrlFetchApp上,当使用JSON对象进行有效负载时,该值似乎以表单的形式发送。@Tanaike,顺便说一句,是的,确实声明可以省略字符串化部分。在aaid中,我发现从对象创建查询字符串的实用程序非常有用useful@Oleg瓦尔特:谢谢你的评论。从您的评论中,我可以注意到UrlFetchApp的示例脚本已经更新。从这种情况下,我可以获得新的信息。非常感谢。@Tanaike-我的荣幸:据我回忆,它一直在那里,但我仍然感到困惑的是,JSON.stringify for JSON有效载荷旁边的这一重要信息不在方法描述中-根据我的经验,我确信在你的情况下,人们跳过了exampleIn OP中的任何内容,这些值将作为表单发送。因此,我认为在您的脚本中,payload:objectToQueryParamsmyPayload可以修改为payload:myPayload。在UrlFetchApp上,当使用JSON对象进行有效负载时,该值似乎以表单的形式发送。@Tanaike,顺便说一句,是的,确实声明可以省略字符串化部分。在aaid中,我发现从对象创建查询字符串的实用程序非常有用useful@Oleg瓦尔特:谢谢你的评论。从您的评论中,我可以注意到UrlFetchApp的示例脚本已经更新。从这种情况下,我可以获得新的信息。非常感谢。@Tanaike-我的荣幸:据我回忆,它一直在那里,但我仍然感到困惑的是,JSON.stringify for JSON payloads旁边的这一重要信息不在方法描述中-根据我的经验,我相信在你的例子中,人们跳过了任何内容我相信你也需要将body更改为payloads我相信你也需要将body更改为payloads
function getCostAU() {
  
  var myHeaders = {"Accept": "application/json",
                   "Content-Type": "application/x-www-form-urlencoded"};
  
  var myPayload = {"client_id" : "XXXX",
                   "client_secret" : "XXXX",
                   "grant_type" : "client_credentials"};
  
  var requestOptions = {
    method: 'POST',
    headers: myHeaders,
    body: myPayload,
    redirect: 'follow',
  };
    
  var url = "https://apigateway.criteo.com/oauth2/token";
  var result = JSON.parse(UrlFetchApp.fetch(url, requestOptions).getContentText());
  var access_token = result.access_token;
};