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"

相关内容