解析 HAR 文件以获得 table 个 HTTP header 值

Parsing HAR file to get a table of HTTP header values

我正在使用 jq 解析 HAR 文件(chrome devtools 生成)。我的 objective 是得到一个 "table" (或者 csv 输出也可能很好),其中包含服务器返回的特定 HTTP header 的值列表,每个请求 URL.

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

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

现在,对于每个请求,我想要一个包含所有 URL 的列,以及具有相应 Content-Encoding 和 Content-Type HTTP header 值的下一列在 response/headers 部分返回。

我使用以下命令成功获取了 HTTP headers 值:

cat har.json | jq '.log.entries[].response.headers[] | select(.name=="Content-Encoding" or .name=="Content-Type") | .value'

现在我想混合使用 URL 和 header 值。我该怎么做?

这里有一个困难,因为 HTTP 服务器可能不会以相同的顺序返回 header。

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

[ "url", "content-type", "content-encoding" ],
(.log.entries[] | [
    .request.url,
    ((.response.headers[] | select(.name == "Content-Type").value) // ""),
    ((.response.headers[] | select(.name == "Content-Encoding").value) // "")
])
| @csv

这里的关键是对于内容类型和编码,如果你想控制它们出现的顺序,你需要单独搜索那些headers。然后,您只需要将其格式化为可以输出为 csv 的格式即可。