是否可以指示 cURL 禁止响应体的输出?
在我的例子中,响应主体是一个 HTML 页面,它溢出了 CLI 缓冲区,使得很难找到相关信息。我想检查输出的其他部分,比如 HTTP 响应代码、头文件等等——所有的 除了实际的 HTML。
您可以使用 -o开关和 null伪文件:
-o
null
curl -s -o /dev/null -v http://google.com
curl -s -o nul -v http://google.com
下面是一种抑制所有旋度输出和标头的方法,如果出现错误,还可以选择显示错误。对于 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隐藏了成功的输出 即使启用了 silent模式,--show-error也会显示错误 如果 HTTP 响应是错误代码(404,500等)而不仅仅是 DNS/TCP 错误,则 --fail将引发错误。
--silent
--output /dev/null
silent
--show-error
--fail
更新: 我意识到原作者想要检查请求的头部和响应代码,而不是关闭 一切。有关如何做到这一点的详细信息,请参阅 Samael 的回答。
当希望显示标题但隐藏响应正文时,需要使用:
curl -sIXGET http://somedomain.com/your/url
我使用 curl -I http://somedomain.com/your/url只是为了显示响应头。但问题是,它使用 HEAD方法发出请求,当您想要测试只响应 GET请求的 API 调用时,这是不好的。这就是 -X GET的用途,它将请求更改为 GET。
curl -I http://somedomain.com/your/url
HEAD
GET
-X GET
所以,总结一下:
-s从输出中隐藏了进度条(特别是当管道传输到另一个程序时) -I显示标头(但发出 HEAD请求) -XGET将请求转换回 GET请求
-s
-I
-XGET
见: http://www.woolie.co.uk/article/curl-full-get-request-dropping-body/
只是 请求领导。你会得到没有身体的标题。标准编译服务器应该像发送 GET 请求一样发送完全相同的信息。
curl --head <url>
或者,如果一个 HEAD 请求由于某种原因不能为您工作,则使用 下面的代码将使 cURL 发送一个 GET请求,然后打印响应代码和头文件,并在不接收响应主体的情况下删除连接——不像其他回答那样接收然后丢弃它。这可以节省大量的时间和带宽,特别是如果体积非常大。
curl --head -X GET <url>
对于任何其他动词 (例如 POST) ,也可以这样做,方法是将它提供给 -X选项而不是 GET。
POST
-X
我建议采取以下解决办法:
curl -sS -i https://example.com | perl -e '$p = 1; while(<STDIN>){ $p = 0 if $_ =~ /^\s*$/; print if $p }'
这是一个较长的一行程序,但能满足你的需要:
output="$(curl -i ....)"
curl
另一个显示响应标题和压制主体的选项:
curl -sD - https://example.com -o /dev/null