0

curl -w 多变量组合格式化输出重定向信息:5个实战模板让跳转诊断事半功倍

2026.06.04 | youres | 22次围观

为什么需要多变量组合输出

用 curl 诊断重定向问题时,很多人只用 -w 输出单个变量,比如只看最终 URL 或跳转次数。但真正要把重定向链路"看透",需要把多个变量组合起来——比如同时拿到最终地址、跳转次数、总耗时、HTTP 状态码,才能对整条链路做出完整判断。

举个例子:一个 URL 跳了 5 次才到达目的地,这明显不正常;跳了 0 次但 URL 变了,说明可能是 HTML meta 刷新或 JS 跳转,curl -L 根本检测不到。只有多变量组合输出,才能一次性把这些问题都暴露出来。

curl -w 格式化输出的两种用法

curl 的 -w(或 --write-out)参数允许你在请求完成后,按照指定格式输出变量值。有两种用法:

方法一:直接在命令行写格式字符串

curl -o /dev/null -s -w "\n最终URL: %{url_effective}\n跳转次数: %{num_redirects}\nHTTP状态码: %{http_code}\n总耗时: %{time_total}s\n" -L https://example.com

这种方式适合快速测试,但格式字符串一旦复杂起来,命令行会变得很难读,而且特殊字符需要仔细转义。

方法二:使用 @ 模板文件(推荐)

curl -o /dev/null -s -w "@redirect_diag.txt" -L https://example.com

把格式字符串写在一个文件里(比如 redirect_diag.txt),然后用 -w "@文件名" 引用。这是生产环境和批量检测的首选方案,模板可以复用,也方便版本管理。

5个实战模板(核心内容)

下面这 5 个模板文件,覆盖了重定向诊断的大部分实战场景。每个模板都可以直接保存成文件使用。

模板1:重定向全链路诊断(最常用)

保存为 redirect_full.txt


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

使用命令:

curl -o /dev/null -s -w "@redirect_full.txt" -L https://example.com

这个模板一次性输出了重定向诊断最需要关注的 7 个指标。特别说明一下 time_redirect:它只计算重定向阶段的耗时,不包含最后一次请求的连接和数据传输时间,非常适合判断"是不是重定向本身太慢"。

模板2:重定向性能分析

保存为 redirect_perf.txt


========== 重定向性能分析 ==========
DNS解析时间:    %{time_namelookup}s
TCP连接时间:    %{time_connect}s
TLS握手时间:    %{time_appconnect}s
重定向阶段耗时:  %{time_redirect}s
首字节时间:     %{time_starttransfer}s
总耗时:         %{time_total}s
跳转次数:       %{num_redirects}
========================================

这个模板专注于性能分析。解读要点:

  • time_namelookup 高 → DNS 解析慢,考虑换 DNS 或加本地缓存
  • time_connect 高 → 网络延迟大,或服务器离客户端太远
  • time_appconnect 高 → TLS 握手慢,可能是证书链太长或加密套件协商慢
  • time_redirect 高且 num_redirects 大 → 重定向链路过长,每次跳转都有额外延迟

模板3:批量检测重定向状态码

保存为 redirect_status.txt

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

配合 Shell 批量检测脚本使用:

#!/bin/bash
while read url; do
  curl -o /dev/null -s -w "@redirect_status.txt" -L "$url"
done < url_list.txt > redirect_report.csv

输出的 CSV 格式可以直接用 Excel 打开分析。每行包含:最终URL、跳转次数、HTTP状态码、总耗时。

模板4:短链 UTM 参数追踪

保存为 shortlink_utm.txt


========== 短链UTM参数追踪 ==========
原始URL:       %{url}
最终URL:       %{url_effective}
跳转次数:       %{num_redirects}
最终HTTP状态码:  %{http_code}
========================================

使用命令:

curl -o /dev/null -s -w "@shortlink_utm.txt" -L -D - "https://short.link/xxx" 2>&1 | grep -E "Location:|==========|原始|最终|跳转|HTTP"

这个模板的关键是 %{url} 变量——它输出原始请求的 URL,和 %{url_effective}(最终 URL)对比,可以直观看到 URL 是否被改写,UTM 参数是否在跳转过程中丢失。

模板5:网站健康巡检 CSV 输出

保存为 health_check.txt

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

批量巡检脚本:

#!/bin/bash
echo "URL,HTTP状态码,跳转次数,总耗时,下载大小" > health_report.csv
while read url; do
  curl -o /dev/null -s -w "@health_check.txt" -L --max-time 10 "$url" >> health_report.csv
done < url_list.txt

这个模板输出的 CSV 可以直接导入监控系统或用 Excel 条件格式高亮异常(比如状态码非 200、跳转次数大于 3、总耗时大于 5 秒)。

模板文件怎么写(@filename 详解)

-w "@文件名" 中的 @ 告诉 curl 从指定文件中读取格式字符串。文件内容就是你要输出的格式,支持所有 curl 支持的变量(完整变量列表见 curl -w格式化输出详解:变量大全+6个实战场景)。

写模板文件时的注意事项:

  • 文件路径可以是绝对路径或相对于当前目录的相对路径
  • 文件中可以用 \n 表示换行,用 \t 表示制表符
  • 如果文件路径中包含空格,需要用引号括起来:-w "@\"C:\My Documents\template.txt\""(Windows)或 -w '@/path/with spaces/template.txt'(Linux/macOS)
  • 文件不存在时 curl 会报错:curl: (63) Could not load file

PowerShell 适配注意事项

在 Windows 的 PowerShell 中使用 curl(实际上是 Invoke-WebRequest 的别名),-w 参数的行为和多变量输出方式和 Linux 下的 curl 有差异。如果需要在 PowerShell 中实现相同的多变量组合输出效果,有两种方案:

  • 方案A:安装真正的 curl(从 curl.se 下载),然后用 curl.exe 调用,绕过 PowerShell 的别名
  • 方案B:用 PowerShell 的 Invoke-WebRequest 配合 -MaximumRedirection 参数,手动提取重定向信息(参考 PowerShell curl url_effective替代方案

如果坚持在 PowerShell 中用真正的 curl,注意模板文件的路径要写成 Windows 风格:

curl.exe -o NUL -s -w "@C:\temp\redirect_full.txt" -L https://example.com

注意 -o NUL(不是 /dev/null),以及模板文件路径用反斜杠。

总结

curl -w 多变量组合输出是重定向诊断的利器。核心要点:

  • 简单测试用命令行内联格式字符串,生产环境用 @模板文件
  • 最常用变量组合:url_effective + num_redirects + http_code + time_total
  • 性能分析加 time_redirecttime_namelookuptime_connect
  • 批量检测输出 CSV 格式,方便后续分析
  • PowerShell 用户注意 curl 别名问题,用 curl.exe 绕过

掌握这 5 个模板,重定向诊断效率至少提升 3 倍。不用再一条一条命令试,一个模板文件搞定所有信息。


相关文章:

版权声明

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

发表评论