cURL抑制响应主体


110

是否可以指示cURL抑制响应正文的输出?

在我的情况下,响应主体是HTML页面,该页面会使CLI缓冲区溢出,从而很难找到相关信息。我想检查输出的其他部分,例如HTTP响应代码,标头等- 实际HTML 之外的所有内容。

Answers:


116

您可以使用-oswitch和null伪文件:

Unix系统

curl -s -o /dev/null -v http://google.com

视窗

curl -s -o nul -v http://google.com

1
...如果您使用的是Unix ;-)对于Windows,您可能要使用nul。这是文档的链接,也许BaltoStar感到有下一次询问前要阅读的欲望;-) curl.haxx.se/docs/manpage.html
Marged

3
别客气。但是它是“ nul”,“ null”将创建一个具有该名称的文件
Marged

1
实际上,我确实在发布之前阅读了手册页并进行了尝试,-s -o nul但是在我的Windows机器 curl -s -o nul -v http://{internal-host}/{internal-uri}输出页面的整个html上,我尝试了curl -s -o nul -v http://google.com并且确实抑制了预期的输出,所以我不明白为什么这对我的内部网站不起作用
BaltoStar 2015年

-o仅指定一个网址输出:如果您有多个网址,则只会丢弃第一个:(
Simon Buchan

1
依赖于非便携式NUL/dev/null。使用-sIXGETIMO是更好的选择。
宾基

45

这是一种抑制所有curl输出和标头的方法,并且可以选择在发生错误时仍显示错误。对cron作业或自动测试有用。

Unix系统

抑制所有输出:

curl --silent --output /dev/null http://example.com

要抑制输出,但在发生错误时仍显示错误:

curl --silent --output /dev/null --show-error --fail http://example.com

视窗

抑制所有输出:

curl --silent --output nul http://example.com

要抑制输出,但在发生错误时仍显示错误:

curl --silent --output nul --show-error --fail http://example.com

参数说明

--silent禁止进行中的下载状态(但仍显示HTML输出)
--output /dev/null隐藏成功的输出
--show-error显示错误,即使silent启用了模式
--fail也会导致错误(如果HTTP响应是错误代码(404、500等),而不仅仅是DNS /) TCP错误。


更新:我意识到原始作者想要检查请求的标头和响应代码,而不是使所有内容保持沉默。有关如何执行此操作的详细信息,请参见samael的答案


2
依赖于非便携式NUL/dev/null。使用-sIXGETIMO是更好的选择。
宾基

1
感谢您的@binki评论-他们实际上做了不同的事情。还意识到OP希望检查我的解决方案中未显示的标头。我已经更新了我的答案以反映这一点。
西蒙·伊斯特

1
我想在重读OP的职位,他们没有说他们只是想看到的头。他们可能实际上一直在寻找curl -vo/dev/null/ curl -voNUL…,但我不知道是否存在可移植的变体,hrm…;-)。
宾基

是否有--fail的简短命令?我认为-sS是我们同时需要--silent和--show-error的必要条件
Freedo

是的,有:curl -Ssfo /dev/null url。但是对未来的维护者要好。
阿米特·奈杜

28

当您想要显示标题但隐藏响应正文时,您将要使用:

curl -sIXGET http://somedomain.com/your/url

我一直curl -I http://somedomain.com/your/url只用于显示响应头。这样做的问题是,它使用HEAD一种方法来发出请求,当您要测试仅响应GET请求的API调用时,这种方法就不好了。这就是-X GET它的用途,它将请求更改为GET

因此,总而言之:

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

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


2
那真的很复杂;curl -i做完全一样的事情。
bfontaine

4
否,-i在输出以及正文中都包含HTTP标头。试试吧。curl -i http://google.comcurl -IXGET http://google.com
samael

对我来说(和OP)curl -I url就足够了,并且效果相同。我只需要检查网址是否响应。这个问题也仅仅是抑制身体,这HEAD很好。
阿米特·奈杜
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.