有没有办法在应用程序脚本中使用 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`”。
在典型的 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 标准和服务器期望。