为什么在此 cURL 调用中的请求正文中出现格式错误的 JSON?
Why do I get a malformed JSON in request body in this cURL call?
我一直在尝试调用 CloudFlare API v4,使用他们自己的文档中提供的示例。
这是示例代码
curl -X PUT "https://api.cloudflare.com/client/v4/zones/023e105f4ecef8ad9ca31a8372d0c353/dns_records/372e67954025e0ba6aaa6d586b9e0b59" \ -H "X-Auth-Email: user@example.com" \ -H "X-Auth-Key: c2547eb745079dac9320b638f5e225cf483cc5cfdda41" \ -H "Content-Type: application/json" \ --data '{"id":"372e67954025e0ba6aaa6d586b9e0b59","type":"A","name":"example.com","content":"1.2.3.4","proxiable":true,"proxied":false,"ttl":120,"locked":false,"zone_id":"023e105f4ecef8ad9ca31a8372d0c353","zone_name":"example.com","created_on":"2014-01-01T05:20:00.12345Z","modified_on":"2014-01-01T05:20:00.12345Z","data":{}}'
也可以在
Update DNS Records
使用 Windows cmd.exe 到 运行 这个命令,我需要先让它成为单行,所以我删除了“”并重新格式化(两次)确保我改变了没有参与这个过程。
这是一行中的相同代码:
curl -X PUT "https://api.cloudflare.com/client/v4/zones/023e105f4ecef8ad9ca31a8372d0c353/dns_records/372e67954025e0ba6aaa6d586b9e0b59" -H "X-Auth-Email: user@example.com" -H "X-Auth-Key: c2547eb745079dac9320b638f5e225cf483cc5cfdda41" -H "Content-Type: application/json" --data '{"id":"372e67954025e0ba6aaa6d586b9e0b59","type":"A","name":"example.com","content":"1.2.3.4","proxiable":true,"proxied":false,"ttl":120,"locked":false,"zone_id":"023e105f4ecef8ad9ca31a8372d0c353","zone_name":"example.com","created_on":"2014-01-01T05:20:00.12345Z","modified_on":"2014-01-01T05:20:00.12345Z","data":{}}'
当我在 cmd 中 运行 这个单行时,它可以工作,但我在请求正文中得到一个格式错误的 JSON,但是,目视检查,在 Notepad++ 上格式化和 运行 通过 JSON 验证器都是肯定的,这个 JSON(从 CloudFlare 文档复制)没有格式错误。
错误信息
{"success":false,"errors":[{"code":6007,"message":"Malformed JSON in request body"}],"messages":[],"result":null}
谷歌搜索此错误消息或错误代码没有任何结果,并且此相同命令在 PC 运行ning Linux.
上有效
谁能告诉我这是否是一个已知错误,JSON 是否确实格式不正确,或者是否想到了其他问题?
我在博客post中找到了答案:"Expecting to find valid JSON in request body..." curl for Windows。
例如,Purge everything --data
的值将是:
# On Linux
--data '{"purge_everything":true}'
# On Windows
--data "{\"purge_everything\":true}"
对于Windows:
- 用双引号替换单引号:
'
-->
"
- 用反斜杠转义双引号:
"
-->
\"
cmd.exe 不支持单引号,运行 那些直接来自文档的命令你可以使用 Bash.
Bash 可以在 Windows 10 中启用:https://www.laptopmag.com/uk/articles/use-bash-shell-windows-10
或 Git Bash 附带 Git for windows:https://gitforwindows.org/
我一直在尝试调用 CloudFlare API v4,使用他们自己的文档中提供的示例。
这是示例代码
curl -X PUT "https://api.cloudflare.com/client/v4/zones/023e105f4ecef8ad9ca31a8372d0c353/dns_records/372e67954025e0ba6aaa6d586b9e0b59" \ -H "X-Auth-Email: user@example.com" \ -H "X-Auth-Key: c2547eb745079dac9320b638f5e225cf483cc5cfdda41" \ -H "Content-Type: application/json" \ --data '{"id":"372e67954025e0ba6aaa6d586b9e0b59","type":"A","name":"example.com","content":"1.2.3.4","proxiable":true,"proxied":false,"ttl":120,"locked":false,"zone_id":"023e105f4ecef8ad9ca31a8372d0c353","zone_name":"example.com","created_on":"2014-01-01T05:20:00.12345Z","modified_on":"2014-01-01T05:20:00.12345Z","data":{}}'
也可以在 Update DNS Records
使用 Windows cmd.exe 到 运行 这个命令,我需要先让它成为单行,所以我删除了“”并重新格式化(两次)确保我改变了没有参与这个过程。
这是一行中的相同代码:
curl -X PUT "https://api.cloudflare.com/client/v4/zones/023e105f4ecef8ad9ca31a8372d0c353/dns_records/372e67954025e0ba6aaa6d586b9e0b59" -H "X-Auth-Email: user@example.com" -H "X-Auth-Key: c2547eb745079dac9320b638f5e225cf483cc5cfdda41" -H "Content-Type: application/json" --data '{"id":"372e67954025e0ba6aaa6d586b9e0b59","type":"A","name":"example.com","content":"1.2.3.4","proxiable":true,"proxied":false,"ttl":120,"locked":false,"zone_id":"023e105f4ecef8ad9ca31a8372d0c353","zone_name":"example.com","created_on":"2014-01-01T05:20:00.12345Z","modified_on":"2014-01-01T05:20:00.12345Z","data":{}}'
当我在 cmd 中 运行 这个单行时,它可以工作,但我在请求正文中得到一个格式错误的 JSON,但是,目视检查,在 Notepad++ 上格式化和 运行 通过 JSON 验证器都是肯定的,这个 JSON(从 CloudFlare 文档复制)没有格式错误。
错误信息
{"success":false,"errors":[{"code":6007,"message":"Malformed JSON in request body"}],"messages":[],"result":null}
谷歌搜索此错误消息或错误代码没有任何结果,并且此相同命令在 PC 运行ning Linux.
上有效谁能告诉我这是否是一个已知错误,JSON 是否确实格式不正确,或者是否想到了其他问题?
我在博客post中找到了答案:"Expecting to find valid JSON in request body..." curl for Windows。
例如,Purge everything --data
的值将是:
# On Linux
--data '{"purge_everything":true}'
# On Windows
--data "{\"purge_everything\":true}"
对于Windows:
- 用双引号替换单引号:
'
-->
"
- 用反斜杠转义双引号:
"
-->
\"
cmd.exe 不支持单引号,运行 那些直接来自文档的命令你可以使用 Bash.
Bash 可以在 Windows 10 中启用:https://www.laptopmag.com/uk/articles/use-bash-shell-windows-10
或 Git Bash 附带 Git for windows:https://gitforwindows.org/