0

curl -w @模板文件同时输出多个重定向变量:3个实战模板让重定向诊断事半功倍

2026.06.06 | youres | 26次围观

为什么要用@模板文件而不是命令行直接写

用curl -w 做重定向诊断时,很多人习惯直接在命令行里拼格式化字符串:

curl -sL -w "最终URL:%{url_effective} 跳转次数:%{num_redirects}\n" -o /dev/null https://example.com

这种方式有两个痛点:

  • 特殊字符(引号、换行、百分号)需要反复转义,写错一个就全乱;
  • 变量一多,命令行长得没法读,更没法复用。

-w @模板文件 的写法把格式化字符串放到独立文件里,彻底解决这两个问题。curl 会读取文件内容作为 -w 的格式串,支持多行、支持所有 %{variable} 变量。

模板文件基础用法

语法非常简单:

# 格式:@ + 文件路径
curl -sL -w @curl-format.txt -o /dev/null https://example.com

模板文件 curl-format.txt 里直接写格式串,不需要额外引号包裹:

最终URL: %{url_effective}
HTTP状态码: %{http_code}
跳转次数: %{num_redirects}

保存后在命令行直接引用,输出自动按文件内容格式化。

实战模板一:重定向全信息诊断

做重定向问题排查时,最常用的是同时看终点URL、跳转次数、各阶段耗时。新建文件 redirect-diag.txt

=== 重定向诊断结果 ===
最终URL:  %{url_effective}
HTTP状态码: %{http_code}
跳转次数: %{num_redirects}
首次连接耗时: %{time_connect}s
重定向耗时: %{time_redirect}s
总耗时: %{time_total}s
==================

使用方式:

curl -sL -w @redirect-diag.txt -o /dev/null https://www.youres.cn

输出示例:

=== 重定向诊断结果 ===
最终URL:  https://youres.cn/
HTTP状态码: 200
跳转次数: 1
首次连接耗时: 0.028s
重定向耗时: 0.085s
总耗时: 0.312s
==================

一眼就能看出有没有多余跳转、重定向耗时是否异常。

实战模板二:JSON格式结构化输出

如果需要把curl的检测结果交给脚本处理,JSON格式是最方便的。新建 redirect-json.txt

{
  "final_url": "%{url_effective}",
  "http_code": %{http_code},
  "num_redirects": %{num_redirects},
  "time_redirect": %{time_redirect},
  "time_total": %{time_total}
}

配合 jq 解析:

curl -sL -w @redirect-json.txt -o /dev/null https://example.com | jq .

注意:url_effective 输出的是字符串,模板里已经加了引号;数字类型变量(http_codenum_redirects 等)不需要加引号,否则JSON解析会报错。

实战模板三:CSV格式批量巡检

批量检测多个网站时,CSV格式可以直接用Excel打开分析。新建 redirect-csv.txt

%{url_effective},%{http_code},%{num_redirects},%{time_redirect},%{time_total}

写个简单脚本批量跑:

#!/bin/bash
echo "最终URL,HTTP状态码,跳转次数,重定向耗时,总耗时" > result.csv
while read url; do
  curl -sL -w @redirect-csv.txt -o /dev/null "$url" >> result.csv
done < urllist.txt

如果想在表头里加说明文字(含中文),需要注意模板文件的编码必须是UTF-8无BOM,否则Excel打开会乱码。

模板文件使用注意事项

  • 文件路径@ 后面跟绝对路径或相对于当前目录的相对路径,找不到文件时curl不会报错,只会输出空内容;
  • 换行符:Windows下建议用Unix格式(LF)保存模板文件,避免多余 \r 出现在输出里;
  • 特殊字符:模板文件里不需要对 % 做转义,curl会自动识别 %{variable} 格式的变量;
  • 变量不存在:如果写了不存在的变量名,curl会原样输出 %{错误变量名},不会报错,调试时注意检查变量名拼写。

相关文章推荐

模板文件这个小技巧,让curl重定向诊断从"能用了"变成"好用了",值得写进你的常用工具箱。

版权声明

本文仅代表个人观点。
本文系AI辅助作者原创,未经许可,转载请保留原文链接。

发表评论