cURL - 使用特定的回應標頭作為檔案名稱的一部分

cURL - 使用特定的回應標頭作為檔案名稱的一部分

我正在使用此 bash 命令將 json http 回應正文寫入檔案中:

curl -s "http://some.domain.com/getSomeJson" | jq . | tee someJson.json;

但我真正想要的是這樣的:

curl -s "http://some.domain.com/getSomeJson" | jq . | tee someJson-THE_VALUE_OF_A_SPECIFIC_RESPONSE_HEADER_NAMED_X-FOO-BAR.json

所以,用自然語言來說:
我想將 cURL 請求的回應寫入一個文件,保留其格式漂亮的 json 內容,同時使用回應標頭之一作為所述文件的文件名的一部分。
我並不關心 jq 部分在命令中的哪一點發生,只要最後的檔案內容是格式化的 json 即可。

答案1

運行管道時將建立 json 檔案。在您的情況下,如果在啟動管道之前無法最終確定檔案名,則必須斷開管道。

您可以使用-D和 標誌-o將回應標頭和回應正文轉儲到兩個單獨的臨時檔案。稍後您可以從這些臨時檔案中提取資料來組成檔案名,然後寫入回應正文。

header_file="/path/to/a/file";
body_file="/path/to/anotherfile";
curl -s \
     -D $header_file \
     -o $body_file \
     "http://some.domain.com/getSomeJson";
some_header=`grep THE_VALUE_OF_A_SPECIFIC_RESPONSE_HEADER_NAMED_X-FOO-BAR $header_file | cut -d ' ' -f2 | tr -d "\n" | tr -d "\r"`
jq . $body_file | tee "someJson-$some_header.json"

相關內容