0

curl -w 多变量组合格式化技巧:5个实战模板让重定向诊断事半功倍

2026.06.04 | youres | 21次围观

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

单独使用 curl -w "%{url_effective}" 只能看到一个变量,但实际调试中往往需要同时知道:重定向了几次、最终落在哪个URL、总共花了多少时间。多变量组合输出就是解决这个问题。

基础语法:三种组合方式

方式一:直接在命令行拼接

curl -s -o /dev/null -w "%{url_effective} %{num_redirects} %{time_total}\n" -L https://example.com

缺点:输出挤在一起,分不清哪个值对应哪个变量。

方式二:用换行符分隔(推荐)

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

输出清晰可读,适合人工查看。

方式三:输出JSON格式(脚本处理首选)

curl -s -o /dev/null \
  -w "{\"url\":\"%{url_effective}\",\"redirects\":%{num_redirects},\"time\":%{time_total}}" \
  -L https://example.com

实战模板一:重定向全链路诊断

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

这个模板一次性输出:最终URL、跳转次数、SSL握手耗时、总耗时、最终HTTP状态码。是排查重定向问题最常用的组合。

实战模板二:性能分析三件套

curl -s -o /dev/null \
  -w "DNS: %{time_namelookup}s\n连接: %{time_connect}s\n首字节: %{time_starttransfer}s\n总耗时: %{time_total}s\n" \
  https://example.com

四个时间变量分别对应:DNS解析、TCP连接、首字节(TTFB)、总耗时。用来定位网站慢在哪个环节。

实战模板三:批量检测CSV输出

curl -s -o /dev/null \
  -w "%{url_effective},%{num_redirects},%{http_code},%{time_total}\n" \
  -L https://example.com

输出逗号分隔格式,直接重定向到CSV文件,配合xargs批量检测多个网站。

实战模板四:@模板文件(最优雅的方式)

新建文件 curl-format.txt

最终URL: %{url_effective}
跳转次数: %{num_redirects}
HTTP状态码: %{http_code}
DNS耗时: %{time_namelookup}s
连接耗时: %{time_connect}s
总耗时: %{time_total}s

调用方式:

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

模板文件支持换行和注释,可读性最好,适合写进团队知识库。

实战模板五:重定向变量组合(url_effective + url_redirect)

curl -s -o /dev/null \
  -w "最终URL: %{url_effective}\n最后一跳Location: %{url_redirect}\n跳转次数: %{num_redirects}\n" \
  -L https://example.com/some-path

url_redirect 显示最后一次重定向的Location头值,url_effective 显示最终地址,两者配合能判断重定向是否完全符合预期。

常见坑:输出中的特殊字符处理

URL中含有 & 或空格时,直接输出会导致Shell解析错误。两种解决方案:

# 方案1:用引号包裹
curl -s -o /dev/null -w "URL: \"%{url_effective}\"\n" -L https://example.com

# 方案2:输出到文件,不依赖终端解析
curl -s -o /dev/null -w "@format.txt" -L https://example.com > result.txt 2>&1

相关文章

版权声明

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

发表评论