Bash:如何将JSON格式的cookie传递给curl



我正在努力将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}

您可以将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转换为curl -b选项所期望的name=value;name2=value2;...;格式的cookie字符串:

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

最新更新