curl -L参数失效求助:添加-L仍返回301永久重定向
解决curl -L参数结合-I时看似不跟随重定向的问题
我来帮你理清这个问题——其实你的curl -L参数是正常工作的,只是你用head -n1截取输出的方式让你误以为它没生效!
问题根源
当你同时使用-I(仅发送HEAD请求,返回响应头)和-L(跟随重定向)时,curl会输出每一次重跳转过程中的HEAD响应,而你的head -n1只截取了第一个响应(也就是初始的301状态码),完全忽略了后续curl跟随重定向后返回的其他响应头。
验证与解决方案
1. 查看完整的重定向过程
直接运行不带head的命令,就能看到curl确实在跟随重定向:
curl -I -L -s era-min-eu.org
你会看到多行以HTTP/开头的响应,最后一行就是最终的目标URL返回的状态码。
2. 只获取最终的状态码
如果只想拿到最终的响应状态,可以用grep过滤所有HTTP状态行,再取最后一行:
curl -I -L -s era-min-eu.org | grep -E "^HTTP/" | tail -n1
3. 更简洁的状态码获取方式
如果你不需要完整的响应头,完全可以不用-I,改用curl的-w参数直接输出最终状态码:
curl -L -s -o /dev/null -w "%{http_code}\n" era-min-eu.org
这个命令会静默执行(-s),丢弃响应内容(-o /dev/null),只输出最终的HTTP状态码。
额外排查点
如果以上方法还是有问题,可以检查你的curl版本(运行curl --version),极少数旧版本的curl在处理HEAD请求的重定向时可能存在bug,升级到最新稳定版通常能解决这类问题。
内容的提问来源于stack exchange,提问作者Guillaume Lannes Lacrouts
相关产品推荐
相关产品推荐

