【问题标题】:Replace JSON body in Curl request from stdin bash替换来自 stdin bash 的 Curl 请求中的 JSON 正文
【发布时间】:2021-11-18 09:05:35
【问题描述】:

我正在尝试使用来自标准输入的输入在 curl 请求的正文中填充一个变量。

echo 123 | curl -d "{\"query\": {\"match\": {\"number\": @- }}}" -XPOST url.com

很遗憾,@- 没有被替换。我希望请求的正文与以下内容相匹配

{
"query": {
    "match": {
      "number": 123
    }
  }
}

如何替换标准输入中的 query.match.number 值?

【问题讨论】:

    标签: bash curl


    【解决方案1】:

    curl 不只是从标准输入读取文档的一个子集,正如您在这里尝试的那样——它要么从标准输入读取整个内容,要么它从标准输入。 (如果它符合您的预期,则不可能将文字字符串 @- 放在传递给 curl -d 的文档文本中,而不引入转义/非转义行为,从而使行为更加复杂)。

    要生成使用来自标准输入的值的 JSON 文档,请使用 jq

    echo 123 |
      jq -c '{"query": { "match": { "number": . } } }' |
      curl -d @- -XPOST url.com
    

    也就是说,根本没有令人信服的理由在这里使用标准输入。请考虑:

    jq -nc --arg number '123' \
        '{"query": { "match": { "number": ($number | tonumber) } } }' |
      curl -d @- -XPOST url.com
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-12
      • 1970-01-01
      • 2021-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-29
      相关资源
      最近更新 更多