使用 UrlFetchApp 在 GET 请求中发送正文?

问题描述 投票:0回答:1

有没有办法在应用程序脚本中使用 UrlFetchApp 发出此请求?

curl -X GET http://test.com/api/demo -H 'Content-Type: application/json' -d '{"data": ["words"]}'

我尝试使用以下代码:

const response = UrlFetchApp.fetch(API_URL, {
    method: "GET",
    headers: { "Content-Type": "application/json" },
    payload: JSON.stringify(payload)
});

有效负载和端点与我测试的curl请求完全相同

但是我收到此错误“无法将 JSON 正文反序列化为目标类型:第 1 行第 88 列缺少字段 `name`”。

google-apps-script curl urlfetch
1个回答
0
投票

在典型的 HTTP GET 请求中,请求参数作为 URL 查询字符串的一部分发送,并且没有请求正文。但是,如果您需要通过 GET 请求发送正文,从技术上讲您可以包含它,但不建议这样做,因为它违反了 HTTP 规范。

从技术上讲,您可以在 Google Apps 脚本中使用 UrlFetchApp 在 GET 请求中包含正文:

function sendGetRequestWithBody() {
  var url = 'https://example.com/api/resource';
  var payload = {
    key1: 'value1',
    key2: 'value2'
  };

  var options = {
    method: 'GET',
    payload: JSON.stringify(payload),
    contentType: 'application/json'
  };

  var response = UrlFetchApp.fetch(url, options);
  Logger.log(response.getContentText());
}

但是,请注意,虽然这在某些情况下可能有效,但这不是标准做法,并且可能不被所有服务器支持或按预期运行。通常最好使用 POST 请求在请求正文中发送数据,因为这符合 HTTP 标准和服务器期望。

© www.soinside.com 2019 - 2024. All rights reserved.