在日常调试网站、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辅助作者原创,未经许可,转载请保留原文链接。

发表评论