Преобразование POST-запроса JavaScript в код скрипта Google Apps - PullRequest
0 голосов
/ 28 мая 2019

Я попробовал все, и 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 голосов
/ 28 мая 2019

У вас есть две проблемы.

Первое, как упомянуто в комментариях, состоит в том, что полезная нагрузка не является строкой JSON. Ваш тип контента application/json, поэтому ваш контент должен быть отформатирован в соответствии с этим mimetype.

Используйте метод JSON.stringify() (он поддерживается в скрипте приложений), чтобы добиться этого следующим образом:

....
"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"
    },
    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...