使用 UrlFetchApp.fetch() 方法时出现"Bad value"错误



我见过这个问题的不同版本,但我似乎无法理解答案。我有以下代码每小时运行一次,将电子邮件中的信息发送到我的Wix网站以解析信息。一旦该功能从我的Wix网站得到回报,我想触发另一个功能来通知用户:

var POST_URL = "https://www.myWixSite.com/_functions/shiurAddition";
var EMAIL_URL = "https://www.myWixSite.com/_functions/shiurNotify";
function gmailInboxToWix() {
var oldLabel = GmailApp.getUserLabelByName("toBeProcessed");
var newLabel = GmailApp.getUserLabelByName("ProcessedByScript");
var threads = oldLabel.getThreads();
for (var i = 0; i < threads.length; i++) {
var messages = threads[i].getMessages();
for (var j = 0; j < messages.length; j++) {
var HTML = messages[j].getBody()
var Date = messages[j].getDate()
messages[j].markRead()
var data = {Date: Date, HTML: HTML};
var options = {
"method": "post",
"headers": {
"Content-Type": "application/json",
},
"payload": data
};
var response = UrlFetchApp.fetch(POST_URL, options)
Logger.log(response)
var emailResponse = UrlFetchApp.fetch(EMAIL_URL, response);
}
threads[i].removeLabel(oldLabel).refresh();
threads[i].addLabel(newLabel);
}
}

当运行这个时,我从谷歌得到一个错误:

异常:错误值(第24行,文件"代码">

第24行是这样的代码:

var emailResponse = UrlFetchApp.fetch(EMAIL_URL, JSON.stringify(response));

问题

尝试使用字符串对象代替高级参数

解释

根据文件,fetch()方法有两个参数:

  1. 向发出请求的URL(必需(
  2. 具有高级配置参数的对象(可选(

因此,传递Object实例以外的任何东西都将失败:

  1. JSON.stringify()返回字符串,因此是无效的数据类型
  2. fetch()方法返回HTTPResponse的一个实例,该实例也是无效的

解决方案

正如Tanaike所建议的,在第一次请求之后,但在第二次请求之前,将payload参数更改为响应的内容,然后使用options,而不是response:

options.payload = response.getContentText();

票据

  1. 有一个contentType高级参数,使用它来设置类型,其余的将由服务处理,您不需要显式设置头

最新更新