【问题标题】:cURL: Invalid JSON when sending stdin as datacURL:将标准输入作为数据发送时 JSON 无效
【发布时间】:2019-12-08 13:18:23
【问题描述】:

我可以通过 cURL 使用以下命令控制飞利浦 Hue 灯:

curl -X PUT --data '{"on":true}' "http://<bridgeip>/api/<key>/lights/7/state";

我正在使用函数生成有效负载,因此我想将其通过管道传输到 cURL(以从标准输入获取其输入):

onString='{"on":true}';
echo "$onString" | curl -X PUT --data - "http://<bridgeip>/api/<key>/lights/7/state";

但这会引发错误:“body contains invalid json”

我不明白这是可行的:

onString='{"on":true}';
curl -X PUT --data "$onString" "http://<bridgeip>/api/<key>/lights/7/state";

谁能解释一下?

(顺便说一句,当我将函数的输出通过管道传输到 cat 时,结果字符串与预期的一样,当复制并粘贴到 jsonlint 时,会检查为有效的 JSON。)

【问题讨论】:

    标签: json bash curl


    【解决方案1】:

    --data - 不从标准输入获取数据,它只是发送一个文字 -

    要从标准输入实际获取数据,请使用--data @-

    (想想看,--data-binary @- 可能是一个更好的主意,我认为在 Windows 上运行时换行会有所不同,但我不是 100% 确定)

    【讨论】:

    • 那行得通。谢谢你。令人困惑的是,cURL 人说:“如果您以字母 @ 开头数据,则其余部分应该是从中读取数据的文件名,或者 - 如果您希望 curl 从标准输入中读取数据。”
    • 我想删除我的问题 - 尽管你已经提供了帮助 - 但有些人已经决定开始投票,所以我想我只需要处理它!
    • @Lorccan 知道为什么你会被否决吗?我唯一矛盾的是“这个问题应该在 stackoverflow.com 上还是 superuser.com 上的问题?”,但这并不能保证投反对票,充其量只能保证关闭/转移投票
    • 我看不出任何原因,但后来我问了这个问题!不确定我明白堆栈溢出和超级用户之间的区别,所以也许你是对的。
    猜你喜欢
    • 2017-06-24
    • 1970-01-01
    • 1970-01-01
    • 2021-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-08
    相关资源
    最近更新 更多