cURL 命令在 Linux 中运行,但在 Windows 2008 中不能运行

cURL 命令在 Linux 中运行,但在 Windows 2008 中不能运行

我在 Windows 2008 Server 上安装了 cURL,并尝试执行以下命令。此命令在同一 LAN 上的 Ubuntu 计算机上执行正常,但当我在 Windows 中运行它时,出现以下错误:

curl -H "Content-Type: application/json" -X POST -d '{ "entity_id": "switch.study_cam" }' https://192.168.1.99:8123/api/services/switch/turn_off?api_password=MyAPIPassword --insecure
curl: (6) Could not resolve host: entity_id
curl: (6) Could not resolve host: switch.study_cam
curl: (3) [globbing] unmatched close brace/bracket in column 1
{"message": "Data should be valid JSON"}

我在 Windows 上测试过 cURLhttp://www.google.com 并且它返回了有效的 HTML,因此似乎已正确安装。

Windows 和 Linux 版 cURL 的语法是否存在差异,或者是否有其他解释说明为什么上述命令在 Windows 中失败?

答案1

问题更可能是 Windows 命令提示符对单引号和双引号的解释不同,与 curl 无关。

尝试反转 JSON 部分中的双引号和单引号:

curl -H "Content-Type: application/json" -X POST -d "{ 'entity_id': 'switch.study_cam' }" https://192.168.1.99:8123/api/services/switch/turn_off?api_password=MyAPIPassword --insecure

答案2

我会将 JSON 放入一个文件中,例如json.txt,并使用curl -d @json.txt 它来避免 shell 的引号处理问题。

这将得到类似

curl -H "Content-Type: application/json" -X POST -d @json.txt \
https://192.168.1.99:8123/api/services/switch\
/turn_off?api_password=MyAPIPassword --insecure

如果你错过了 Unix shell,管理系统2是一个很好的系统,可以向您的 Windows 机器添加常用的工具(但它必须比 Windows XP / Windows Server 2003 更新)。

相关内容