0

curl -L参数跟随重定向详解:3个实战场景让你彻底搞懂这个常用参数

2026.06.01 | youres | 34次围观

在日常调试网站、API或者排查重定向问题时,很多人会遇到这样的情况:明明输入的是一个 URL,浏览器最终却跳转到了完全不同的地址。这时候如果直接用默认的 curl 命令去请求,拿到的可能只是第一个响应,根本不知道最终落在了哪里。

解决这个问题的方法很简单——给 curl 加一个 -L 参数。

curl -L 是什么

-L 是 Location 的缩写。curl 默认情况下,遇到服务器返回 301、302、303、307、308 这类重定向状态码时,会停在原地,直接把响应头里的 Location 信息打印给你看,然后就结束了,不会自动去访问那个新地址。

加上 -L 之后,curl 就会像浏览器一样,自动顺着重定向链路一直访问下去,直到拿到最终响应为止。

基本用法

最简单的情况:

curl -L https://example.com/short-url

这条命令会自动跟随所有重定向,最终把真实页面的内容输出出来。

实际场景举例

场景一:短链跳转追踪

假设你有一个短链服务,用户访问 https://t.cn/abc123,最终会被重定向到目标页面。在排查问题时,你需要知道:这个短链最终指向哪个真实地址?跳转过程中有没有丢失 UTM 参数?总共有几次跳转?

用 curl -L 可以直接验证:

curl -L -v https://t.cn/abc123 2>&1 | grep Location

加上 -v 参数可以看到完整的请求过程,包括每次重定向的 Location 头信息。

场景二:查看最终响应的状态码

默认 curl 显示的是第一次请求的状态码,跟随重定向之后,最终页面的状态码可能不同:

curl -L -w '最终状态码: %%%{http_code}%%' -o /dev/null -s https://example.com

这里的 -w 参数可以输出最终的状态码,结合 -L 使用,能准确判断最终页面的可达性。

场景三:限制跳转次数防止死循环

单独用 -L 有个潜在风险:如果目标服务器配置错误,存在循环重定向,curl 会一直跳下去直到耗尽资源。--max-redirs 就是用来设置跳转上限的:

curl -L --max-redirs 5 https://example.com

加上这个参数之后,curl 最多跟随 5 次重定向,超过就停下来报错,避免被死循环拖死。

curl -L 和 -I 的结合

有时候你只想确认最终地址和状态码,并不需要下载整个页面内容。可以把 -L-I(只查响应头)配合使用:

curl -L -I https://example.com

这样 curl 会跟随重定向,但只获取最终的响应头,不下载页面 body,效率高得多。

curl -L 跟浏览器行为有什么区别

虽然 curl -L 模拟了浏览器跟随重定向的基本行为,但两者之间有一些细节差异需要注意:

  • Cookie 处理:浏览器在重定向过程中会携带并更新 Cookie,curl 默认也会跟随 Cookie,如果想更严格地控制,可以使用 -b-c 参数来手动管理 Cookie 文件。
  • POST 请求重定向:浏览器在 301/302 时会改为 GET 请求,curl -L 的默认行为也是如此。如果想保持 POST 方法,需要使用 -X POST 配合 -L
  • HSTS 预加载:浏览器会记住 HSTS 设置,强制走 HTTPS,但 curl 完全遵循服务器返回的响应头,不会做额外的 HSTS 强制。

和其他类似参数的对比

  • -L:跟随 HTTP 重定向(301/302/303/307/308)。
  • --max-redirs N:限制跟随重定向的次数,配合 -L 使用,防止死循环。
  • -k / --insecure:跳过 HTTPS 证书验证,跟重定向无关,但如果目标服务器用的是自签名证书,这个参数就派上用场了。

常见报错及处理

错误:Maximum (5) redirects followed

说明目标 URL 的重定向次数超过了 --max-redirs 设置的上限。处理方法:检查这个 URL 本身是否正确,或者调大 max-redirs 的值来追踪完整的跳转链路。

错误:curl: (35) OpenSSL SSL_connect: SSL_ERROR_SYSCALL

通常是 HTTPS 证书验证出了问题。在测试环境可以用 -k 跳过验证,生产环境建议检查证书链是否完整。

总结

curl -L 是一个非常实用的参数,特别适合:

  • 调试短链和 URL 跳转链路
  • 排查重定向过程中 UTM 参数是否丢失
  • 验证 API 最终端点的可达性
  • 获取经过多次跳转后的最终页面内容

配合 --max-redirs 防止死循环,结合 -v 查看详细跳转过程,再用 -w 输出关键指标,这条命令就能变成你排查 URL 跳转问题的瑞士军刀。


相关文章:
curl追踪重定向链路检查UTM参数:5步快速定位流量追踪失效原因
curl -w格式化输出详解:变量大全+6个实战场景
Nginx return 301 拼接问号和参数详细教程:3种正确写法让查询字符串不再丢失
版权声明

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

发表评论