我现在正在写一个bash脚本,我使用的是curl,我想做的是获取一个响应的特定头。
基本上我希望这个命令工作:
curl -I -w "%{etag}" "server/some/resource"
不幸的是,-w,--write-out选项似乎只有一组它支持的变量,并且不能打印任何作为响应的一部分的头。我需要自己解析curl输出来获得ETag值吗?或者有没有一种方法可以让curl打印特定头的值?
显然是类似于
curl -sSI "server/some/resource" | grep 'ETag:' | sed -r 's/.*"(.*)".*/\1/'
这样做的技巧,但它会更好地有 curl 过滤器的头部。
4条答案
按热度按时间tgabmvqs1#
为“-w”指定的变量没有直接连接到http头。所以看起来你必须自己“解析”它们:
oxf4rvwz2#
您可以使用单个sed或awk命令打印特定的头,但HTTP头使用CRLF行结尾。
使用awk,如果值包含空格,则可以添加
FS=": "
:7vhp5slm3#
其他答案使用
-I
选项并解析输出。值得注意的是,-I
将HTTP方法更改为HEAD
。(-I
的长opt版本是--head
)。根据您所追求的领域和Web服务器的行为,像Content-Length
这样的报头在HEAD
和GET
之间可能不同。使用-X
选项强制使用所需的HTTP方法,但仍然只能看到头作为响应。4dc9hkyq4#
v7.83.0中的新增功能
参考:https://daniel.haxx.se/blog/2022/03/24/easier-header-picking-with-curl/