Google脚本上的POST请求不完整

时间:2016-12-19 08:20:15

标签: curl google-apps-script

我正在尝试使用Google表格使用urlFetchApp发送POST请求。

我已经编写了下面的代码,但可以使它工作。每次运行此脚本时,我都会出现以下错误 - “code”:400,“message”:“错误的请求:不完整的令牌请求”。我不明白,因为当我从POSTMAN运行相同的请求时,我有一个成功的答案。在flied client id中,我有像“/”和“+”这样的特殊字符,在client_secret“!”中,也许它来自那里?

感谢您的帮助!

---- GSheets脚本-----

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<div class="container">
  <div class="button" id="circleToggle">+</div>
  <div class="circle" id="circle1">Some data</div>
  <div class="circle" id="circle2"></div>
</div>

-----邮差中的卷曲命令-------

function DX_API_request() {
  var payload  = {
    'grant_type': 'client_credentials',
    'client_id': 'name/a+@b.com',
    'client_secret': 'XXX!'
  }; 
  var options = {
    'method' : 'POST',
    'Accept': 'application/json',
    'payload' : JSON.stringify(payload),
    'muteHttpExceptions': true
  };
    Logger.log(JSON.stringify(payload));
    var test = UrlFetchApp.getRequest('https ://dx-example.com/admin/v100/api/oauth/token', options);
    Logger.log(test);
    var resquest_bearer = UrlFetchApp.fetch('https ://dx-example.com/admin/v100/api/oauth/token',options);
    Logger.log(resquest_bearer);
    var dataAll = JSON.parse(resquest_bearer.getContentText());
    Logger.log(dataAll.message);
}

1 个答案:

答案 0 :(得分:0)

您在google apps脚本中没有像curl命令那样提出相同的请求。

在使用curl发出的请求中,您要将内容类型设置为application/x-www-form-urlencoded,并设置另外两个标题:Cache-Control: no-cache Postman-Token: 655d9932-4681-f23d-6caf-5fcf63c10b82

Google脚本中的相同请求类似于:

var payload = {
    'grant_type': 'client_credentials',
    'client_id': 'name/a+@b.com',
    'client_secret': 'XXX!'
};
var options = {
    'method': 'post',
    'payload': payload,
    'headers': {
        "Cache-Control": 'no-cache',
        "Postman-Token": '655d9932-4681-f23d-6caf-5fcf63c10b82'
    }
};
var test = UrlFetchApp.getRequest('https://dx-example.com/admin/v100/api/oauth/token', options);
Logger.log(test);

主要问题可能是您脚本将数据发布为application/json而非application/x-www-form-urlencoded。更多信息:https://developers.google.com/apps-script/reference/url-fetch/url-fetch-app