是否可以指示cURL抑制响应体的输出?
就我而言,响应正文是一个HTML页面,它溢出了CLI缓冲区,使得很难找到相关信息。我想检查输出的其他部分,例如HTTP响应代码,标题,e.t.c。 - 除了实际HTML之外的所有。
答案 0 :(得分:82)
您可以使用-o
开关和null
伪文件:
curl -s -o /dev/null -v http://google.com
curl -s -o nul -v http://google.com
答案 1 :(得分:16)
这是一种抑制所有curl输出和标题的方法,如果出现错误,仍然会显示错误。适用于cron作业或自动化测试。
要取消所有输出:
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
也会显示错误
如果HTTP响应是错误代码(404,500等)而不仅仅是DNS / TCP错误,--fail
将引发错误。
更新:我意识到原作者想要检查请求的标头和响应代码,而不是静默所有内容。有关如何执行此操作的详细信息,请参阅samael's answer。
答案 2 :(得分:9)
如果要显示标题但隐藏响应正文,则需要使用:
curl -sIXGET http://somedomain.com/your/url
我一直在使用curl -I http://somedomain.com/your/url
来显示响应标头。但问题是它使用HEAD
method发出请求,当您想要测试仅响应GET
请求的API调用时,这是不好的。这是-X GET
的用途,它将请求更改为GET
。
所以,总结一下:
-s
隐藏输出的进度条(在管道到另一个程序时特别有用)
-I
显示标题(但提出HEAD
请求)
-XGET
将请求转换回GET
请求
请参阅:http://www.woolie.co.uk/article/curl-full-get-request-dropping-body/
答案 3 :(得分:1)
只需发出HEAD请求。您将获得没有主体的标题。符合标准的服务器应该在这里发送与GET请求完全相同的信息。
curl --head <url>
如果HEAD请求由于某种原因而对您不起作用,这将使cURL接收并打印响应代码和标头,然后断开连接甚至不接收响应主体-与其他收到并随后丢弃它的答案不同。这样可以节省大量时间和带宽,尤其是在机身很大的情况下。
curl --head -X GET <url>