在调试与 的外部主机通信时UrlFetchApp
,有一些工具可供您使用。
它有助于muteHttpExceptions
您查看它们。(事实上,您可以简单地编写代码来自己处理它们,并且只throw
针对您真正没想到的异常。)
这是通过添加参数'muteHttpExceptions' : true
来完成的fetch
。
将异常静音后,fetch
不会抛出异常,而是会在HTTPResponse中传递失败响应代码。从那里,您可以提取响应代码和内容文本以进行调试(或自动处理)。
像这样修改您的代码,以记录错误:
var response = UrlFetchApp.fetch(url, options);
var rc = response.getResponseCode();
if (rc !== 200) {
// HTTP Error
Logger.log("Response (%s) %s",
rc,
response.getContentText() );
// Could throw an exception yourself, if appropriate
}
运行,这是我们看到的:
[15-08-27 11:18:06:688 EDT] Response (404.0) {
"error": true,
"message": "Could not find API"
}
一些 API 提供了非常丰富的错误消息。这个,不多说了。但它确实告诉我们我们的 URL 是正确的,但是服务找不到我们想要的 API。接下来,深入研究为什么会这样。
我们可以fetch
使用 来检查选项和参数getRequest()
。在现有调用的正上方添加这一行fetch()
,并在fetch()
.
var test = UrlFetchApp.getRequest(url, options);
在调试器中启动函数,当断点被命中时,仔细检查其中的内容test
。
一个常见的问题是POST
有效载荷的编码。您手动编码#
并%23
使用JSON.stringify()
,所以没有问题。
检查其余选项,我们看到contentType
is not 'application/json'
。

所以现在你查看你的代码,发现名称contentType
被错误输入为content-Type
. 删除连字符,然后重试。
继续进行,直到您确定并修复了任何其他错误。
另一个技巧是用来encodeURIComponent()
转义参数中的受限字符fetch
,而不是手动编码它们。它简化了您的代码,因为您可以编写“真实”字符,#
而不是 UTF-8 转义序列,例如%23
.
更新代码:
function PostParameters2() {
var parameters = {
apikey: "--apikey--",
urls: [
encodeURIComponent("https://twitter.com/search?q=#running"),
encodeURIComponent("https://twitter.com/search?q=#swimming")
]
};
var data = JSON.stringify(parameters);
var url = 'https://kimonolabs.com/kimonoapis/--apiId--/update';
var options = {
'method': 'POST',
'contentType': 'application/json',
'payload': data,
'muteHttpExceptions' : true
};
var test = UrlFetchApp.getRequest(url, options);
var response = UrlFetchApp.fetch(url, options);
var rc = response.getResponseCode();
if (rc !== 200) {
// HTTP Error
Logger.log("Response (%s) %s",
rc,
response.getContentText() );
// Could throw an exception yourself, if appropriate
}
else {
// Successful POST, handle response normally
var responseText = response.getContentText();
Logger.log(responseText);
}
}