以详细模式过滤curl标头输出

Igo*_*sic 5 grep curl

使用curl -v ...,即打印出输入和输出标头的详细模式。但是,此信息不是通过管道传输的,我无法 grep 出我不需要的行。

如何过滤curl header 输出?

小智 7

的标头输出curl被打印到标准错误。所以你必须使用重定向,例如 grep 出Content-Length标头:

curl -v google.com 2>&1 | grep -vi content-length
Run Code Online (Sandbox Code Playgroud)


bin*_*nki 7

curl -v更好的选择是告诉将标头输出到 STDOUT,而不是使用(详细模式) curl,而不需要所有额外的调试内容,也不打印响应正文。这样,您可以grep仅通过响应标头,避免 shell 重定向的需要,并且知道您的过滤不必理解和解析curl\xe2\x80\x99s 内部调试消息(这些消息可能不被视为其 API 的一部分) )。

\n

您可以通过组合-I(不打印正文)、-X\xc2\xabMETHOD\xc2\xbb(覆盖方法)和-s(静默,不显示进度条)参数来完成此操作。

\n
curl -sIXGET https://www.google.com/ | grep -i content-type:\n
Run Code Online (Sandbox Code Playgroud)\n
    \n
  • -s指示curl隐藏进度条。如果省略并curl检测到它正在终端中运行,它将绕过管道并直接与终端对话以显示进度条,这通常没有帮助并且会使终端混乱。
  • \n
  • -I指示curl在收到标头后断开与服务器的连接,而不是等待正文。如果您实际上如问题中所述,只对 grep感兴趣,那么这很有用。HEAD它还具有将请求方法默认为您指定的副作用-XHEAD
  • \n
  • -X\xc2\xabmethod\xc2\xbb(例如,-XGET)覆盖该方法。在许多情况下,HEAD请求就是您想要的,因为 HTTP 标准规定HEAD必须返回与同一请求完全相同的标头GET。但是,在调试服务器或使用不符合标准的服务器时,指示curl发出GET请求但在读取响应正文之前断开连接可能会很有用。这样,您可以看到服务器响应时发送的实际GET头,而不是希望服务器正确实现。
  • \n
\n