Łuk*_*ski 4 javascript google-sheets google-apps-script kimono
我正在尝试通过表单中的Google脚本更新我的和服API.表格中有很多网址,但我在这个例子中只显示了2个.
我收到HTTP错误404.我已经检查过,apikey和id都没问题.
我怎样才能确定哪些是错的?
function PostParameters2() {
var parameters = {
apikey: "--apikey--",
urls: [
"https://twitter.com/search?q=%23running",
"https://twitter.com/search?q=%23swimming"
]
};
var data = JSON.stringify(parameters);
var url = 'https://kimonolabs.com/kimonoapis/--apiId--/update';
var options = {
'method': 'POST',
'content-Type': 'application/json',
'payload': data
};
var response = UrlFetchApp.fetch(url, options);
Logger.log(response.getResponseCode());
}
Run Code Online (Sandbox Code Playgroud)
在调试外部主机通信时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
}
Run Code Online (Sandbox Code Playgroud)
运行,这是我们看到的:
[15-08-27 11:18:06:688 EDT] Response (404.0) {
"error": true,
"message": "Could not find API"
}
Run Code Online (Sandbox Code Playgroud)
某些API提供了非常丰富的错误消息.这个,不是那么多.但它确实告诉我们我们的URL正确,但该服务无法找到我们想要的API.接下来,深入研究为什么会如此.
我们可以fetch使用来检查选项和参数getRequest().在现有fetch()调用的正上方添加此行,并在其上添加断点fetch().
var test = UrlFetchApp.getRequest(url, options);
Run Code Online (Sandbox Code Playgroud)
在调试器中启动该函数,当命中断点时,仔细检查内容test.
常见问题是POST有效载荷的编码.您手工编码#到%23和使用的JSON.stringify(),所以没有问题.
检查剩余的选项,我们发现contentType不是'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);
}
}
Run Code Online (Sandbox Code Playgroud)