linux curl 特定标头的“写出”值

vddsk6oq  于 2023-04-20  发布在  Linux
关注(0)|答案(4)|浏览(131)

我现在正在写一个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 过滤器的头部。

tgabmvqs

tgabmvqs1#

为“-w”指定的变量没有直接连接到http头。所以看起来你必须自己“解析”它们:

curl -I "server/some/resource" | grep -Fi etag | sed -r 's/.*"(.*)".*/\1/'
oxf4rvwz

oxf4rvwz2#

您可以使用单个sed或awk命令打印特定的头,但HTTP头使用CRLF行结尾。

curl -sI stackoverflow.com | tr -d '\r' | sed -En 's/^Content-Type: (.*)/\1/p'

使用awk,如果值包含空格,则可以添加FS=": "

awk 'BEGIN {FS=": "}/^Content-Type/{print $2}'
7vhp5slm

7vhp5slm3#

其他答案使用-I选项并解析输出。值得注意的是,-I将HTTP方法更改为HEAD。(-I的长opt版本是--head)。根据您所追求的领域和Web服务器的行为,像Content-Length这样的报头在HEADGET之间可能不同。使用-X选项强制使用所需的HTTP方法,但仍然只能看到头作为响应。

curl -sI http://ifconfig.co/json | awk -v FS=": " '/^Content-Length/{print $2}'
18

curl -X GET -sI http://ifconfig.co/json | awk -v FS=": " '/^Content-Length/{print $2}'
302
4dc9hkyq

4dc9hkyq4#

v7.83.0中的新增功能

curl -I -s -o /dev/null -w '%header{etag}' https://example.com/

参考:https://daniel.haxx.se/blog/2022/03/24/easier-header-picking-with-curl/

  • -I =仅下载标头
  • -s =静音
  • -o =将输出重定向到文件
  • -w =写出标头参数到stdout

相关问题