使用curl -v ...
,即打印出输入和输出标头的详细模式。但是,此信息未通过管道传输,我无法 grep 出我不需要的行。
如何过滤 curl 标头输出?
答案1
输出的 headercurl
会被打印到标准错误中。因此你必须使用重定向,例如 grep 出 header Content-Length
:
curl -v google.com 2>&1 | grep -vi content-length
答案2
与其使用curl -v
(详细模式),更好的选择是告诉curl
将标头输出到 STDOUT,而不进行所有额外的调试,也不打印响应主体。这样,您可以grep
只查看响应标头,避免 shell 重定向的需要,并且知道您的过滤不必理解和解析 的curl
内部调试消息(这些消息可能不被视为其 API 的一部分)。
你可以这样做通过组合-I
(不打印正文)、-X«METHOD»
(覆盖方法)和-s
(静默,不显示进度条)参数。
curl -sIXGET https://www.google.com/ | grep -i content-type:
-s
指示curl
隐藏进度条。如果省略并curl
检测到它正在终端中运行,它将绕过管道并直接与终端对话以显示进度条,这通常没有帮助并且会使终端混乱。-I
指示curl
在收到标头后断开与服务器的连接,而不是等待正文。如果你真的像问题中所说的那样,有兴趣通过 grep 来查找,那么这很有用仅 HTTP 响应标头。它还有一个副作用,就是将请求方法默认为,HEAD
就像您指定的那样-XHEAD
。-X«method»
(例如-XGET
)会覆盖该方法。在许多情况下,HEAD
请求就是您想要的,因为 HTTP 标准规定HEAD
必须返回与同一请求完全相同的标头。但是,在调试服务器或使用不符合标准的服务器时,指示发出请求但在读取响应主体之前断开连接GET
会很有用。这样,您可以看到curl
GET
这实际的服务器将响应发送的标头GET
而不是希望服务器能够正确实现。