首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Kimono会响应404?

为什么Kimono会响应404?
EN

Stack Overflow用户
提问于 2015-08-26 15:30:57
回答 1查看 153关注 0票数 4

我试图通过Google脚本更新我的和服API。工作表中有许多urls,但我只为这个示例显示了2个urls。

我正在接收HTTP错误404。我查过了,所有的钥匙和身份证都没问题。

我怎么才能确定到底出了什么问题?

代码语言:javascript
复制
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());


}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-27 15:25:39

在使用UrlFetchApp调试外部主机通信时,您可以使用以下几种工具。

  1. 它有助于muteHttpExceptions,以便您可以查看它们。(实际上,您可以编写自己的代码来处理它们,只有throw可以处理您不希望看到的异常。) 这是通过将'muteHttpExceptions' : true添加到fetch参数来完成的。 如果异常是静音的,fetch不会抛出异常,而是会在HTTPResponse中传递失败响应代码。在那里,您可以提取响应代码和内容文本以进行调试(或自动处理)。 像这样修改代码,以记录错误: var response = UrlFetchApp.fetch(url,options);var rc = response.getResponseCode();if (rc !== 200) { // HTTP错误Logger.log("Response (%s) %s",rc,response.getContentText( );//可以自己抛出异常,如果适当的话)。 快跑,下面是我们看到的: 15-08-27 11:18:06:688 EDT响应(404.0) {“错误”:true,"message":“未能找到API”} 一些API提供非常丰富的错误消息。这个,没那么多。但是它确实告诉我们,我们的URL是正确的,但是服务找不到我们想要的API。接下来,探究一下为什么会这样。
  2. 我们可以使用fetch检查getRequest()选项和参数。将这一行添加到现有fetch()调用的上方,并在fetch()上放置一个断点。 var test = UrlFetchApp.getRequest(url,options); 在调试器中启动函数,当命中断点时,仔细检查test的内容。 一个常见的问题是POST有效载荷的编码。您手动编码#%23,并使用JSON.stringify(),所以没有问题。 检查剩下的选项,我们发现contentType不是'application/json'

现在,您查看您的代码,发现contentType的名称是错误类型的content-Type。删除连字符,然后再试一次。

一直往前走,直到你发现并修复了其他的bug。

另一个技巧是使用encodeURIComponent()来转义fetch参数中的受限字符,而不是手工编码它们。它简化了代码,因为您可以编写像#这样的“真实”字符,而不是像%23这样的UTF-8转义序列。

更新代码:

代码语言:javascript
复制
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);
  }

}
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32230792

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档