为什么我在此cURL调用中的请求正文中出现格式错误的JSON?

时间:2016-06-14 07:52:24

标签: json curl dns cloudflare

我一直尝试使用自己文档中提供的示例调用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,但是,视觉检查,记事本++上的格式化和通过JSON验证器的运行都是正面的,这个JSON(复制自CloudFlare文档)没有格式错误。

错误消息

{"success":false,"errors":[{"code":6007,"message":"Malformed JSON in request body"}],"messages":[],"result":null}

谷歌搜索此错误消息或错误代码没有给我任何东西,这个相同的命令适用于运行我老板的Linux的电脑。

有人可以告诉我这是否是一个已知错误,如果JSON确实是格式错误或是否有其他想法?

谢谢

2 个答案:

答案 0 :(得分:12)

Frank.Lowell,谢谢你的提问!

我在博文中找到了答案:"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:

  1. 用双引号替换单引号:' --> "
  2. 使用反斜杠转义双引号:" --> \"

答案 1 :(得分:0)

cmd.exe不支持单引号,要直接从文档中运行这些命令,就可以使用Bash。

可以在Windows 10中启用重击:https://www.laptopmag.com/uk/articles/use-bash-shell-windows-10

或Git Bash用于Windows的Git:https://gitforwindows.org/