【问题标题】:This API does not support parsing form-encoded input此 API 不支持解析表单编码的输入
【发布时间】:2013-10-16 05:05:04
【问题描述】:

我尝试向端点提交数据,但它说数据太大,所以我将方法更改为 POST 并收到错误:

This API does not support parsing form-encoded input.

接下来我将类型更改为 application/json,仍然是 post,现在我得到了:

{
"error": {
  "errors": [
  {
    "domain": "global",
"reason": "parseError",
  "message": "Parse Error"
 }
 ],
  "code": 400,
 "message": "Parse Error"
 }
}

将大量数据(即 2730 字节)发布到端点并让它正确处理的最佳方式是什么?在我的情况下,有问题的字段是文本类型,因为我超过了应用引擎在字符串中保存的 500 个字符的限制。

此外,与许多事情一样,这在我的本地机器上效果很好,它只会在实时应用引擎实例上出现此错误。

谢谢!

【问题讨论】:

  • 一个字符串几乎可以是数据存储实体中允许的全部 1MB(需要为密钥留出空间,仅此而已)。如果不持久化输入,则可以在请求中接受 32MB 的字符串。
  • @bossylobster 我注意到的是,如果您在端点中有一个实体类型,它将在一个帖子上接收一个 JSON 对象,但如果您只有一个字符串或一个长等的东西。命名属性,然后您必须将其附加到 URL。我认为在定义 API 端点以强制它使用/采用 JSON 时,最好对 JSON 进行标准化或给予我们更多控制。
  • 根据定义命名的属性最终会作为路径参数。不过参数名冲突是允许的,所以也可以在body中定义。

标签: java google-app-engine google-cloud-endpoints


【解决方案1】:

不确定您的问题是否与此相关,但我收到“此 API 不支持解析表单编码输入”。当我尝试使用 curl 发送这样的 POST 消息时出错:

curl -X POST -d '{"name": "Foo"}' http://foo.appspot.com/_ah/api/foo/1/endpoint

问题是我没有设置内容类型。如果未在命令行中指定,则使用 Content-Type: application/x-www-form-urlencoded curl POST。 Google 云端点不接受此内容类型。

当我更改 curl 调用以包含内容类型时,它起作用了:

curl -X POST -d '{"name": "Foo"}' --header "Content-Type: application/json" http://foo.appspot.com/_ah/api/foo/1/endpoint

【讨论】:

  • 这为我解决了问题。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2015-05-28
  • 1970-01-01
  • 1970-01-01
  • 2019-05-21
  • 2019-02-12
  • 1970-01-01
  • 2021-10-24
  • 2013-03-31
相关资源
最近更新 更多