【问题标题】:Google App Scripts - UrlFetchApp.Fetch unable to postGoogle 应用脚本 - UrlFetchApp.Fetch 无法发布
【发布时间】:2021-02-16 19:45:28
【问题描述】:

我试图让 GAS 触发对 Adverity Datatap 管理 API 的外部 POST 请求以触发提取 (https://help.adverity.com/hc/en-us/articles/360009502839-Datastreams-Triggering-a-Fetch) 但是,我收到的响应表明正在发送 GET 请求而不是 POST 请求.下面的代码中是否有一些特定的东西?

function triggerFetch() {
  var myURL = 'https://YOUR_STACK.datatap.adverity.com/api/datastreams/684/fetch'
  var options, thisDate, headers, data;

  thisDate = Utilities.formatDate(new Date(), "EST-5", "yyyy-MM-dd") + 'T00:00:00Z';
  headers = {
    'Authorization':'Token XXXXXXXXXXXXXXXXXXXXXXXXXX'
  };
  data = {
    'start':thisDate
    ,'end':thisDate.replace('T00','T12')
  }
  options = {
    method:'POST'
    ,muteHttpExceptions: true
    ,headers:headers
    ,'Content-Type':'application/json'
    ,payload:JSON.stringify(data)
    }
  var response = UrlFetchApp.fetch(myURL,options);
  Logger.log(response);
}

编辑:对于其他上下文,这是邮递员的工作 cURL 输出

curl --location --request POST 'https://YOUR_STACK.datatap.adverity.com/api/datastreams/684/fetch/' \
--header 'Content-Type: application/json' \
--header 'Authorization: Token XXXXXXXXXXXXXXXXXXXXXXXXXX' \
--data-raw '{
    "start": "2021-02-16T00:00:00Z",
    "end": "2021-02-16T12:00:00Z"
}'

【问题讨论】:

  • 这可能不是它,但content-Type 应该是contentType 我认为
  • 感谢您的建议,不幸的是,将“Content-Type”切换为“contentType”不起作用。

标签: google-apps-script urlfetch


【解决方案1】:

您可以尝试使用 ""(双引号)而不是 ''(单引号)使选项包含字符串。它应该是这样的:

  options = {
    "method" :"POST"
    ,"muteHttpExceptions": true
    ,"headers": headers
    ,"contentType":"application/json"
    ,"payload":JSON.stringify(data)
    }

【讨论】:

  • 感谢您的建议 Jason,我实际上能够解决我的问题并自己添加了答案。该问题似乎特定于涉及重定向的 POST 请求。
【解决方案2】:

我能够弄清楚这一点,并发布一个答案,以防它与其他任何人相关。 datatap API 文档指定 URL 应以尾随“/”结尾。如果没有最后一个字符,则会发生重定向,并且 http 方法会重置为 GET 而不是 POST。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-27
    • 2013-05-25
    相关资源
    最近更新 更多