cURL抑制反应体

Bal*_*tar 86 curl suppress output

是否有可能指示cURL抑制响应体的输出?

在我的例子中,响应主体是一个HTML页面,它溢出CLI缓冲区,使得很难找到相关信息.我想检查输出的其他部分,如HTTP响应代码,标题等 - 除了实际的HTML 之外的所有内容.

Gil*_*not 97

您可以使用-o开关和null伪文件:

Unix的

curl -s -o /dev/null -v http://google.com
Run Code Online (Sandbox Code Playgroud)

视窗

curl -s -o nul -v http://google.com
Run Code Online (Sandbox Code Playgroud)

  • 别客气.但它是"nul","null"将创建一个具有该名称的文件 (3认同)
  • 依赖于不可移植的 `NUL` 和 `/dev/null`。使用 [`-sIXGET`](/sf/answers/3476852711/) 是 IMO 的更好选择。 (2认同)

Sim*_*ast 27

这是一种抑制所有curl输出和标题的方法,如果出现错误,仍然可以选择显示错误.适用于cron作业或自动化测试.

Unix的

要抑制所有输出:

curl --silent --output /dev/null http://example.com
Run Code Online (Sandbox Code Playgroud)

要抑制输出,但如果出现错误仍显示错误:

curl --silent --output /dev/null --show-error --fail http://example.com
Run Code Online (Sandbox Code Playgroud)

视窗

要抑制所有输出:

curl --silent --output nul http://example.com
Run Code Online (Sandbox Code Playgroud)

要抑制输出,但如果出现错误仍显示错误:

curl --silent --output nul --show-error --fail http://example.com
Run Code Online (Sandbox Code Playgroud)

参数说明

--silent抑制正在下载的状态(但仍将显示HTML输出)
--output /dev/null隐藏成功输出
--show-error显示错误,即使silent启用模式
--fail也会引发错误,如果HTTP响应是错误代码(404,500等)而不仅仅是DNS/TCP错误.


更新:我意识到原作者想要检查请求的标题和响应代码而不是静音一切.有关如何执行此操作的详细信息,请参阅samael的答案.

  • 依赖于不可移植的`NUL`和`/ dev / null`。使用[`-sIXGET`](/sf/answers/3476852711/)是一个更好的选择。 (2认同)
  • 是的,有:`curl -Ssfo /dev/null url`。但要善待未来的维护者。 (2认同)

sam*_*ael 18

如果要显示标题但隐藏响应正文,则需要使用:

curl -sIXGET http://somedomain.com/your/url
Run Code Online (Sandbox Code Playgroud)

我一直在curl -I http://somedomain.com/your/url用于显示响应标头.但问题在于,当您想要测试仅响应请求的API调用时,它会使用不合适的HEAD方法发出GET请求.这就是-X GET它的用途,它将请求更改为a GET.

所以,总结一下:

-s隐藏输出中的进度条(当管道连接到另一个程序时特别有用)
-I显示标题(但发出HEAD请求)
-XGET将请求转换回GET请求

请参阅:http://www.woolie.co.uk/article/curl-full-get-request-dropping-body/

  • 不,`-i` 在输出和正文中都包含 HTTP 标头。尝试一下。`curl -i http://google.com` 与 `curl -IXGET http://google.com` 不同 (7认同)
  • 但是 HEAD / GET 可能会给你带来不同的结果。这是不一样的。特别是如果您需要这些类型的命令来解决正在发生的问题。我发现这个答案中的建议非常有帮助。-i 和 -I 不一样。-I 和-sIXGET 不一样。 (4认同)
  • 这真的很复杂;`curl -i` 做同样的事情。 (2认同)

iva*_*eev 6

只需提出一个 HEAD 请求。您将获得没有正文的标题。符合标准的服务器应该在这里发送与 GET 请求完全相同的信息。

curl --head <url>
Run Code Online (Sandbox Code Playgroud)

如果 HEAD 请求由于某种原因对您不起作用,以下内容将使 cURL 发出GET请求,然后打印响应代码和标头,并在不接收响应正文的情况下断开连接 - 与其他接收然后丢弃它的答案不同。这可以节省大量的时间和带宽,尤其是在主体非常大的情况下。

curl --head -X GET <url>
Run Code Online (Sandbox Code Playgroud)

您可以POST通过将任何其他动词(例如)提供给-X选项而不是GET.