0

curl批量检测重定向次数和最终URL输出CSV:5个实战脚本让网站巡检自动化

2026.06.04 | youres | 26次围观

为什么需要批量检测重定向

网站运维中,重定向问题是最常见的故障之一。无论是HTTP跳HTTPS、域名迁移、还是短链服务,重定向配置错误都会导致用户体验下降、SEO权重流失、甚至业务中断。手动逐个检查URL重定向效率低下,而curl批量检测重定向次数和最终URL输出CSV方案可以实现自动化巡检,大幅提升运维效率。

本文将分享5个实战脚本,帮助你快速掌握curl批量检测重定向的技巧,并将结果输出为CSV报告,方便后续分析和追踪。

核心原理:curl的-w参数

curl的-w参数(write-out)是批量检测重定向的核心。它允许我们自定义输出格式,提取HTTP请求的关键信息。常用的重定向相关变量包括:

  • url_effective:最终请求的URL,即重定向终点
  • num_redirects:重定向次数
  • http_code:HTTP状态码
  • url_redirect:服务器声明的重定向目标URL

基础命令示例:

curl -Ls -o /dev/null -w "最终URL:%{url_effective}\n重定向次数:%{num_redirects}\n状态码:%{http_code}\n" https://example.com

参数说明:

  • -L:跟随重定向
  • -s:静默模式,不输出进度信息
  • -o /dev/null:丢弃响应内容,只保留-w输出

脚本1:Shell单URL检测输出CSV格式

最简单的批量检测脚本,读取URL列表文件,逐个检测并输出CSV格式:

#!/bin/bash
# redirect_check.sh

INPUT_FILE="urls.txt"
OUTPUT_FILE="redirect_report.csv"

# CSV表头
echo "原始URL,最终URL,重定向次数,状态码" > 

while read url; do
    result=
    echo "," >> 
done < 

echo "检测完成,结果已保存到 "

使用方法:

# 创建URL列表文件
cat > urls.txt << EOF
https://example.com/page1
https://example.com/page2
https://example.com/old-page
EOF

# 执行脚本
chmod +x redirect_check.sh
./redirect_check.sh

输出示例:

原始URL,最终URL,重定向次数,状态码
https://example.com/page1,https://example.com/page1,0,200
https://example.com/page2,https://newsite.com/page2,2,200
https://example.com/old-page,https://example.com/new-page,1,301

脚本2:添加时间戳和检测耗时

在实际运维中,我们还需要关注重定向的性能。以下脚本增加了时间戳和总耗时:

#!/bin/bash
# redirect_check_advanced.sh

INPUT_FILE="urls.txt"
OUTPUT_FILE="redirect_report_.csv"

# CSV表头
echo "检测时间,原始URL,最终URL,重定向次数,状态码,总耗时(秒)" > 

while read url; do
    timestamp=
    result=
    echo ",," >> 
done < 

echo "检测完成,结果已保存到 "

time_total变量返回整个请求的总耗时(秒),包括DNS解析、连接建立、数据传输等所有阶段。通过这个指标可以快速定位重定向链路过长导致的性能问题。

脚本3:并行批量检测提升效率

当URL数量较多时,串行检测效率较低。以下脚本使用GNU Parallel实现并行检测:

#!/bin/bash
# redirect_check_parallel.sh

INPUT_FILE="urls.txt"
OUTPUT_FILE="redirect_report.csv"
JOBS=10  # 并发数

# CSV表头
echo "原始URL,最终URL,重定向次数,状态码,总耗时(秒)" > 

check_url() {
    url=
    result=
    echo ""
}

export -f check_url

# 使用并行处理
parallel -j  check_url {} <  >> 

echo "检测完成,结果已保存到 "

注意事项:

  • 需要安装parallel工具:sudo apt install parallel
  • 并发数不要设置过高,避免对目标服务器造成压力
  • 建议并发数控制在5-20之间

脚本4:检测重定向异常并告警

以下脚本会检测重定向次数异常(超过阈值)的URL,并输出警告:

#!/bin/bash
# redirect_check_alert.sh

INPUT_FILE="urls.txt"
OUTPUT_FILE="redirect_report.csv"
ALERT_FILE="redirect_alerts.txt"
MAX_REDIRECTS=3  # 重定向次数阈值

# CSV表头
echo "原始URL,最终URL,重定向次数,状态码,告警" > 
echo "重定向异常告警报告 - 06/04/2026 09:17:23" > 
echo "======================================" >> 

while read url; do
    result=
    redirects=
    
    alert=""
    if [ "" -gt "" ]; then
        alert="⚠️重定向次数过多"
        echo "警告:  重定向次数  超过阈值 " >> 
    fi
    
    echo ",," >> 
done < 

echo "检测完成"
echo "正常结果: "
echo "异常告警: "

这个脚本可以帮助你快速定位以下问题:

  • 重定向链路过长(超过3次)
  • 可能存在的重定向循环
  • Nginx/Apache配置错误导致的多次跳转

脚本5:PowerShell版本(Windows环境)

Windows用户可以使用PowerShell脚本实现相同功能:

# redirect_check.ps1

param(
    [string] = "urls.txt",
    [string] = "redirect_report.csv",
    [int] = 10
)

# CSV表头
"原始URL,最终URL,重定向次数,状态码,总耗时(秒)" | Out-File -FilePath  -Encoding UTF8

 = Get-Content 

foreach ( in ) {
    if ([string]::IsNullOrWhiteSpace()) { continue }
    
    try {
         = [System.Diagnostics.Stopwatch]::StartNew()
         = Invoke-WebRequest -Uri  -Method Get -MaximumRedirection 10 -TimeoutSec  -UseBasicParsing
        .Stop()
        
         = .BaseResponse.ResponseUri.AbsoluteUri
         = .Headers.Count - 1  # 简化计算
         = [int].StatusCode
         = .Elapsed.TotalSeconds
        
        ",,,," | Out-File -FilePath  -Encoding UTF8 -Append
    }
    catch {
        ",ERROR,ERROR,,0" | Out-File -FilePath  -Encoding UTF8 -Append
    }
}

Write-Host "检测完成,结果已保存到 "

使用方法:

# 创建URL列表
"https://example.com/page1"
"https://example.com/page2"
"https://example.com/old-page" | Out-File -FilePath urls.txt -Encoding UTF8

# 执行脚本
.\redirect_check.ps1

CSV报告分析技巧

生成CSV报告后,可以使用以下方法快速分析:

使用awk筛选重定向次数大于2的URL

awk -F',' 'NR==1 || >2' redirect_report.csv

使用sort按重定向次数排序

sort -t',' -k3 -n -r redirect_report.csv

统计各状态码数量

awk -F',' 'NR>1 {count[]++} END {for(code in count) print code, count[code]}' redirect_report.csv

常见问题排查

问题1:url_effective输出为空

原因:未使用-L参数跟随重定向

解决:在curl命令中添加-L参数

问题2:PowerShell中curl是别名

原因:PowerShell的curlInvoke-WebRequest的别名,不支持-w参数

解决:使用curl.exe(Windows内置curl)或直接使用PowerShell脚本

问题3:CSV中文乱码

原因:编码不一致

解决:Shell脚本使用UTF-8编码,PowerShell使用-Encoding UTF8参数

最佳实践建议

  1. 定期巡检:将脚本加入定时任务,每周或每月自动检测
  2. 设置阈值告警:重定向次数超过3次、耗时超过2秒时发送告警
  3. 保留历史记录:输出文件名带时间戳,方便对比分析
  4. 批量URL管理:使用配置文件管理URL列表,便于维护和更新
  5. 结合监控工具:将CSV报告导入Zabbix、Prometheus等监控平台

总结

curl批量检测重定向次数和最终URL输出CSV方案,是网站运维自动化的利器。通过本文的5个实战脚本,你可以:

  • 快速批量检测网站重定向状态
  • 生成结构化CSV报告便于分析
  • 发现重定向链路过长、循环跳转等异常
  • 监控重定向性能,优化用户体验

将这套方案应用到日常运维中,可以大幅提升工作效率,确保网站重定向配置正确、用户体验流畅。

相关文章

版权声明

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

发表评论