节点 post 请求 body 被截断

Node post request body gets truncated

当尝试 post WakeUp event with a JSON body to the Alexa events API 使用带有 axios 或 request-promise 的 nodejs 时,API 总是 returns 错误 500。

我post编辑了一个online endpoint to actually see what gets posted and learned that the post body gets truncated which obviously results in invalid json. I abstracted the problem and tried to run it from a virgin nodejs installation by using repl.it,结果是一样的。

有趣的是,header 和 body 的长度之间似乎存在某种关系。因此,当我缩短 header 中的身份验证令牌时,body 的更多字符将被传输。如果我将 body 中的长标记缩短到大约 450 到 500 个字符(它似乎有所不同),整个请求就会通过。显然这不是解决方案,因为身份验证需要令牌。

当我尝试使用 axios 版本将其降低到 0.10 时,我曾经得到一个结果,但 posting 再次导致另一个 500。如果我 post 经常足够一些请求完成,即使在当前的 axios 版本上。我也尝试使用 request-promise 得到相同的结果。

我觉得我犯了一个非常愚蠢的错误,但我找不到它,而且我真的找不到关于这个话题的任何东西,所以这让我发疯。任何帮助将不胜感激!

这看起来很棘手..首先,我不认为你犯了一个非常愚蠢的错误。在我看来,由于某种原因,low-level 模块之一不喜欢 POST body 中的某些东西(真的很奇怪。)。我玩过这个,我Axios 和 Request 的行为完全相同。如果我注释掉标记(correlationToken 和 bearer token),一切正常。

如果我在本地测试,一切正常(例如设置快速服务器并记录 POST body)。

也 posting 到 https://postman-echo.com/post 按预期工作(使用原始 post 数据)..

我在这里创建了这个:https://repl.it/repls/YoungPuzzlingMonad

在我看来,对 http://posthere.io 的原始请求失败只是因为请求大小。如果你尝试一个非常基本的 POST 和一个大的 JSON body 你会得到相同的结果。

我用 superagent 也得到了相同的结果。这让我相信这是服务器端的事情...

这与 post 请求完全无关。发送 WakeUp 事件后出错的原因是 Alexa.WakeOnLANController 接口中缺少包含 MACAdresses 的配置参数。 我使用 AlexaResponse class 通过 createPayloadEndpointCapability 添加功能,尚未修改以支持 "new" WakeOnLANController 接口。

遗憾的是,发现被接受了,我的 WOL-capable 设备被添加到我的智能家居设备中,尽管缺少必需的参数:(

posthere.io 切断长 post 的身体花了我好几个小时...从好的方面来说,我知道了在节点中发出 post 请求的许多不同方式;)

再次感谢特里的调查!