是否可以指示 cURL 抑制响应正文的输出?
在我的例子中,响应正文是一个 HTML 页面,它溢出了 CLI 缓冲区,导致很难找到相关信息。我想检查输出的其他部分,例如 HTTP 响应代码、标头等。 - 除了实际的 HTML 之外的所有内容。
-o
开关和
null
伪文件 :Unix
curl -s -o /dev/null -v http://google.com
Windows
curl -s -o nul -v http://google.com
Unix
curl --silent --output /dev/null http://example.com
抑制输出但如果发生错误仍显示错误:
curl --silent --output /dev/null --show-error --fail http://example.com
Windows
curl --silent --output nul http://example.com
抑制输出但如果发生错误仍显示错误:
curl --silent --output nul --show-error --fail http://example.com
参数说明--silent
(
-s
) 抑制正在下载的统计信息(但仍会显示 HTML 输出)
--output /dev/null
(
-o
) 隐藏成功输出
即使启用了 --show-error
模式,
-S
(silent
) 也会显示错误如果 HTTP 响应是错误代码(404、500 等)而不仅仅是 DNS/TCP 错误,
--fail
(
-f
) 将引发错误。
更新:我意识到原作者想要检查请求的标头和响应代码,而不是沉默一切。有关如何执行此操作的详细信息,请参阅 samael 的回答。
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/
发出 HEAD 请求。 您将获得没有正文的标头。符合标准的服务器应该在此处发送与 GET 请求完全相同的信息。
curl --head <url>
或者,如果 HEAD 请求由于某种原因对您不起作用,以下内容将使 cURL 发送 GET
请求,但随后打印响应代码和标头并在不接收响应正文的情况下断开连接--与其他接收然后丢弃它的答案不同。这可以节省大量时间和带宽,特别是当主体很大时。
curl --head -X GET <url>
您可以对任何其他动词(例如POST
)进行同样的操作,只需将其提供给
-X
选项而不是
GET
即可。
curl -sD - https://example.com -o /dev/null
curl -sS -i https://example.com | perl -e '$p = 1; while(<STDIN>){ $p = 0 if $_ =~ /^\s*$/; print if $p }'
这是一句较长的单行文字,但可以满足您的需要:
output="$(curl -i ....)"
curl
参数