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

问题描述 投票:0回答:2

我一直在尝试使用他们自己的文档中提供的示例来调用 CloudFlare API v4。

这是示例代码

curl -X PUT "https://api.cloudflare.com/client/v4/zones/023e105f4ecef8ad9ca31a8372d0c353/dns_records/372e67954025e0ba6aaa6d586b9e0b59" \ -H "X-Auth-Email: [email protected]" \ -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":{}}'

也可以在以下位置找到 更新 DNS 记录

使用 Windows cmd.exe 运行此命令,我需要先将其设置为单行,因此我删除了“”并重新格式化(两次)以确保我在此过程中没有更改任何部分。

这是一行相同的代码:

curl -X PUT "https://api.cloudflare.com/client/v4/zones/023e105f4ecef8ad9ca31a8372d0c353/dns_records/372e67954025e0ba6aaa6d586b9e0b59" -H "X-Auth-Email: [email protected]" -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":"请求正文中的 JSON 格式错误"}],"messages":[],"result":null}

谷歌搜索此错误消息或错误代码没有给我任何结果,并且相同的命令可以在运行 Linux 的 PC 上运行。

有人可以告诉我这是否是一个已知的错误、JSON 是否确实格式错误或者是否想到了其他问题?

json curl dns cloudflare
2个回答
31
投票

我在博客文章中找到了答案:“期望在请求正文中找到有效的 JSON...”curl for Windows

例如,对于 清除所有内容

--data
值将为:

# On Linux
--data '{"purge_everything":true}'

# On Windows
--data "{\"purge_everything\":true}"

# On Windows works as well
--data "{""purge_everything"":true}"

对于 Windows:

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

1
投票

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

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

或者 Git Bash 附带适用于 Windows 的 Git:https://gitforwindows.org/

© www.soinside.com 2019 - 2024. All rights reserved.