将JavaScript POST请求转换为Google Apps脚本代码

时间:2019-05-28 12:00:03

标签: google-apps-script

我已经尝试了一切,并且google不会回答我的特定问题,所以去了。

我想将以下代码转换为Apps Script语法,下面的代码照常工作。

var request = new XMLHttpRequest();

request.open('POST', 'https://.......');

request.setRequestHeader('Content-Type', 'application/json');
request.setRequestHeader('Accept', 'application/json');
request.setRequestHeader('X-Token', 'myTokenHere');

request.onreadystatechange = function () {
  if (this.readyState === 4) {
    console.log('Status:', this.status);
    console.log('Headers:', this.getAllResponseHeaders());
    console.log('Body:', this.responseText);
  }
};

var body = {
  'fromDate': '2019-01-01T13:54:51+0200',
  'toDate': '2019-05-01T13:54:51+0200'
};

request.send(JSON.stringify(body));

例如,我尝试过的是: (我得到的只是一个500错误)

function req(){
  var url = "https://.......";
  var options = {
    "method": "post",
    "muteHttpExceptions": true,
    "headers": {
      "Content-Type": "application/json",
      "Accept": "application/json",
      "X-Token": "myTokenHere"
    },
    "payload": {
      "fromDate": "2019-01-01T13:54:51+0200",
      "toDate": "2019-05-01T13:54:51+0200"
    }
  };
  var response = UrlFetchApp.fetch(url, options);
  Logger.log(response.getContentText());
}

谢谢!

和平=)

1 个答案:

答案 0 :(得分:0)

您有两个问题。

首先,如注释中所述,有效负载不是JSON字符串。您的内容类型为application/json,因此需要对有效负载进行格式化以匹配该模仿类型。

使用JSON.stringify()方法(Apps脚本支持该方法)以实现以下目的:

....
"payload":JSON.Stringify({
    "fromDate": "2019-01-01T13:54:51+0200",
    "toDate": "2019-05-01T13:54:51+0200"
}),
....

您的第二个问题是设置contentType标头。这有点违反约定,但是您可以像这样将内容类型设置为options对象( NOT 标头对象)的属性:

var options = {
    ...
    "contentType":"application/json",
    "headers":{
        "Accept": "application/json",
        "X-Token": "myTokenHere"
    },
    ...
}