此 API 不支持解析表单编码的输入
Posted
技术标签:
【中文标题】此 API 不支持解析表单编码的输入【英文标题】:This API does not support parsing form-encoded input 【发布时间】: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中定义。 【参考方案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
【讨论】:
这为我解决了问题。感谢您的帮助。以上是关于此 API 不支持解析表单编码的输入的主要内容,如果未能解决你的问题,请参考以下文章
从 XML 声明片段获取 XML 编码:部分内容解析不支持 XmlDeclaration
Laravel 8 - 此路由不支持 POST 方法。支持的方法:删除