我正在使用jq解析一个HAR文件(生成的chrome devtools)。我的目标是得到一张桌子" (或者csv输出也可能很好),每个请求URL都包含服务器返回的特定HTTP标头的值列表。
要获取所有请求网址的列表,我可以这样做:
cat har.json | jq '.log.entries[].request.url'
现在,我想为每个请求提供一个包含所有URL的列,以及在响应/标题部分中返回相应Content-Encoding和Content-Type HTTP标头值的下一列。
我设法使用以下命令获取HTTP标头值:
cat har.json | jq '.log.entries[].response.headers[] | select(.name=="Content-Encoding" or .name=="Content-Type") | .value'
现在我想混合使用URL和标头值。我怎么能这样做?
这里存在一个困难,因为HTTP服务器可能不会以相同的顺序返回标头。
答案 0 :(得分:1)
你可以使用这样的过滤器:
[ "url", "content-type", "content-encoding" ],
(.log.entries[] | [
.request.url,
((.response.headers[] | select(.name == "Content-Type").value) // ""),
((.response.headers[] | select(.name == "Content-Encoding").value) // "")
])
| @csv
这里的关键是,对于内容类型和编码,如果要控制它们出现的顺序,则需要单独搜索这些标题。然后,从那里,你只需要以这样的方式格式化它,它可以输出为csv。