此 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 方法。支持的方法:删除

使用 EWS API 发送电子邮件时控制消息编码

tcpdf 为啥有些css不支持

VBA(Visual Basic):ComboBox(表单控件) - 对象不支持此属性或方法

不支持SOAP编码