【问题标题】:Error when I POST JSON data to wordpress site将 JSON 数据发布到 wordpress 网站时出错
【发布时间】:2021-05-11 01:34:07
【问题描述】:

我的命令是: curl -X POST --user "admin:admin" https://website.com/wp-json/wp/v2/posts/ -H "Content-Type: application/json" -d {"title":"test","content":"Content","status":"draft"}

我得到的回应: {"code":"rest_invalid_json","message":"Invalid JSON body passed.","data":{"status":400,"json_error_code":4,"json_error_message":"Syntax error"}}

谢谢!

【问题讨论】:

  • 这行得通吗? wordpress.org/support/topic/…
  • 是否需要在命令中使用单引号,比如:'{"title":"test","content":"Content","status":"draft"}'?我使用this page 上出现的验证器检查了 json 本身,并且 json 本身是有效的。
  • 从 curl 文档看来,-d 之后的数据可能需要包含某种引号,如 POST (HTTP) 部分所示。在这种情况下,由于您已经在 json 本身中使用了双引号,因此在 json 外部使用单引号可能会有所帮助。
  • 我尝试在数据周围使用单引号和双引号,不会改变我得到的响应。
  • @D1EM4CH1N3 很遗憾听到您的回复没有改变。我在下面更新了我的答案,以分享我在自己的 WordPress 网站上尝试执行此类请求时发现的内容。我最终需要在 json 周围使用单引号,但我还需要为 --user 凭据部分使用 应用程序密码

标签: wordpress windows api curl


【解决方案1】:

从我早期的 cmets 中,我感觉这个错误与 -d 可能需要在数据文本周围加引号有关。

因此,在您的情况下,可能值得尝试在 -d 数据文本周围加上单引号,因为您当前在 json 文本中使用双引号。

因此,您的 curl 命令可能如下所示:

curl -X POST --user "admin:admin" https://website.com/wp-json/wp/v2/posts/ -H "Content-Type: application/json" -d '{"title":"test","content":"Content","status":"draft"}'

这是基于 curl 文档如何显示引号应与 -d 相关的数据文本一起使用,基于 curl documentation here 的“POST (HTTP)”部分下的示例。我认为这也是我过去所做的事情,但目前我没有具体的个人例子。


更新

不管怎样,当我尝试自己运行这种 curl 类型的命令时,当我没有在 json 文本周围使用单引号时出现以下错误:

{"code":"rest_invalid_json","message":"Invalid JSON body passed.","data":{"status":400,"json_error_code":4,"json_error_message":"Syntax error"}}curl: (3) Port number ended with 'C' curl: (3) Port number ended with 'd'

当我在 json 数据周围使用单引号运行命令时,例如:-d '{"title":"test","content":"Content","status":"draft"}',该命令有效,并且在 WordPress 中添加了一个草稿。我还收到了一个看起来与新草稿帖子相关的 json 回复。

要检查的另一件事可能是与--user 部分一起使用的凭据。我最终不得不使用我为 WordPress 帐户中的用户生成的“应用程序密码”。这与我用户的登录密码不同。如果您尚未尝试在 WordPress 中为此部分使用“应用程序密码”,则可能值得尝试看看这是否能解决您的问题。当我发现这个时:

  1. 登录我的 WordPress 网站
  2. 点击了Users菜单项
  3. 点击了一个用户
  4. 向下滚动到用户信息页面的底部
  5. 点击了Add New Application Password按钮

【讨论】:

  • 感谢您的帮助,我尝试了应用程序密码,这是我很确定的问题之一。我以为我要疯了,但问题出在 windows & curl 问题上。
  • @D1EM4CH1N3 很高兴听到它现在正在工作!
【解决方案2】:

好的,这是一个特定于 Windows 的问题,我猜大多数人都在运行 unix/linux 客户端,所以这不适用于他们。我在这里找到了解决方案:https://stackoverflow.com/a/7173011/15161479

问题在于 windows 上的 curl,引号需要转义。我还做了一些其他的事情,比如安装“应用程序密码”插件。

这就是我的命令现在的样子 curl --user "user:application password" http://website.com/wp-json/wp/v2/posts/ -H "Content-Type: application/json" --data "{"""title""":"""test""","""content""":"""Content""","""status""":"""draft"""}"

希望这可以帮助其他人!

【讨论】:

    猜你喜欢
    • 2013-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多