【问题标题】:Bash: How to pass cookie in JSON format to curlBash:如何将 JSON 格式的 cookie 传递给 curl
【发布时间】:2022-01-07 13:51:25
【问题描述】:

我正在努力将 cookie JSON 文件附加到 bash 中的 curl 请求。

我知道它可以用 cookie.txt 来完成,但因为我有以下模式:

{"provisioning": "61d83f29bda251.85229990"}

卷曲请求:

curl -k -v -b cookie.json -F name=csr -F filedata=@${CSRFILE} https://prov.is.byl.com/cert_signer.php >${CRTFILE}

是否可以不用这种方式发送?:

curl -k -v -b 'provisioning=61d83f29bda251.85229990' -F name=csr -F filedata=@${CSRFILE} https://prov.is.byl.com/cert_signer.php >${CRTFILE}

【问题讨论】:

  • 第二个命令应该可以工作
  • @anubhava 是的,但我不想这样发送。
  • 简短的回答可能是“不”。但我敢打赌,有一个忍者可以使用jq 和可能使用awksed 将JSON 转换为单行所需的格式。

标签: php json linux bash curl


【解决方案1】:

您可以将您的 JSON cookie 文件转换为 curl 期望的正确字符串格式,如下所示:

curl -k -v \
  -b "$(jq -r '[to_entries[]|([.key,.value|@uri]|join("="))]|join(";")' cookie.json)" \
  -F name=csr -F "filedata=@$CSRFILE" \
  https://prov.is.byl.com/cert_signer.php >"$CRTFILE"

jq 命令将cookie.json 转换为name=value;name2=value2;...; 格式的cookie 字符串,正如curl -b 选项所期望的那样:

jq -r '[to_entries[]|([.key,.value|@uri]|join("="))]|join(";")' cookie.json

这是jq 脚本本身:

# start populating an array
[
  # transform input object cookie.json
  # members and value into array entries
  to_entries[] | (
    # Create an array for each entry
    [
      # with object member key to become cookie name
      .key,
      # and value encoded as uri format in case it contains
      # characters not allowed in an HTTP header (like CR, LF, TAB, SPACE, ...)
      .value | @uri
    ] | join("=") # join this array entries with an equal sign
  )
] | join(";") # join array entries of cookie_name=cookie_value with a semocolon

【讨论】:

  • 这就是我想要的。谢谢!
  • @OmarAbdelrazik 忘记使用以下命令保护 cookie 值:(.value|@uri)
猜你喜欢
  • 1970-01-01
  • 2014-02-25
  • 2018-02-17
  • 2021-11-18
  • 1970-01-01
  • 2020-05-24
  • 1970-01-01
  • 1970-01-01
  • 2023-03-15
相关资源
最近更新 更多