POST 正文请求为 x-www-form-urlencoded

POST Request in Body as x-www-form-urlencoded

我使用下面的代码 POST grant_type , client_id , client_secret , refresh tokenhttps://webexapis.com/v1/access_token 下面是 postman Javascript-fetch 控制台,当我在 POstman

中尝试时它是成功的
var myHeaders = new Headers();
myHeaders.append("Content-Type", "application/x-www-form-urlencoded");

var urlencoded = new URLSearchParams();
urlencoded.append("grant_type", "refresh_token");
urlencoded.append("client_id", "xxxx");
urlencoded.append("client_secret", "yyyy");
urlencoded.append("refresh_token", "zzzz");

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

fetch("https://webexapis.com/v1/access_token", requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));

请帮助我在 Appscript 中获取结果。 所以我在 Google Sheets 脚本中尝试了以下代码,但它显示错误

function webexDev() {
    
var cisurl = "https://webexapis.com/v1/access_token";

var data = {
  'grant_type': 'refresh_token',
  'client_id': 'xxxx',
  'client_secret': 'yyyy',
  'refresh_token': 'zzzz'
};

var options = { 'method': 'post', 'payload': data, 'contentType': 'application/x-www-form-urlencoded'}

    var response = UrlFetchApp.fetch(cisurl,options);
    var cisjson=response.getContentText();
    var cisdata=JSON.parse(cisjson)
   Logger.log(cisjson)
}

我在 Postman 中尝试了同样的方法,并且成功了。我想在 Google Sheet 脚本中使用相同的内容

你把事情搞混了。这些参数 grant_type、client_id、client_secret 和 refresh_token 不是 HTTP-Headers,而是您发送到服务器的负载。

根据文档 (https://developers.google.com/apps-script/reference/url-fetch/url-fetch-app),这应该有效:

var cisurl = "https://webexapis.com/v1/access_token";

var data = {
  'grant_type': 'refresh_token',
  'client_id': 'abcdefg',
  'client_secret': 'hijklmn',
  'refresh_token': 'opqrstuvw'
};

var options = {
  'method': 'post',
  'payload': data
}

var response = UrlFetchApp.fetch(cisurl,options);

P.S.: 不要在 stack-overflow

上分享你的秘密