1

我正在使用 jq 解析一个 HAR 文件(生成的 chrome devtools)。我的目标是获得一个“表格”(或 csv 输出也可以),其中包含服务器返回的特定 HTTP 标头的值列表,每个请求 URL。

要获取所有请求 URL 的列表,我可以这样做:

cat har.json | jq '.log.entries[].request.url'

现在,对于每个请求,我想要一个包含所有 URL 的列和下一个列,其中包含在 response/headers 部分中返回的相应 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 服务器可能不会以相同的顺序返回标头。

4

1 回答 1

2

你可以使用这样的过滤器:

[ "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 的方式对其进行格式化。

于 2015-09-30T16:43:23.130 回答