如何在Bash中使用httpie提取HEAD请求的Location头部信息?
解决方法
你遇到的问题确实是因为HTTPie默认把响应头输出到了stderr,而你的管道只捕获了stdout的内容,所以才会得到空结果。不用合并标准流,直接用HTTPie自带的参数就能解决:
使用--print h(缩写-p h)参数,让HTTPie仅将响应头输出到标准输出(stdout),这样后续的管道命令就能正常捕获并处理内容了:
http -p h HEAD https://dbeaver.io/files/dbeaver-ce_latest_amd64.deb | grep Location | sed "s/Location: //"
补充说明
HTTPie的默认输出逻辑是:
- 响应头 → 输出到stderr
- 响应体 → 输出到stdout
这样设计是为了让你在获取响应体的同时,能单独查看头部信息而不干扰主体内容。但当你需要处理头部时,--print参数可以指定要输出的部分(h代表响应头,b代表响应体,H代表请求头等),并且会将指定内容发送到stdout,完美适配你的需求。
如果你想更简洁地提取Location值,甚至可以用awk代替grep+sed:
http -p h HEAD https://dbeaver.io/files/dbeaver-ce_latest_amd64.deb | awk '/Location:/{print $2}'
内容的提问来源于stack exchange,提问作者k0pernikus
相关产品推荐
相关产品推荐

