如何在不将curl stdout重定向到文件的情况下获取HTTP请求的curl进度表?

如何在不将curl stdout重定向到文件的情况下获取HTTP请求的curl进度表?

当我跑步时

curl example.com > example.html

在终端上,我得到的进度表如下

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
100  1256  100  1256    0     0   1950      0 --:--:-- --:--:-- --:--:--  1947
100  1256  100  1256    0     0   1950      0 --:--:-- --:--:-- --:--:--  1947

根据https://curl.se/docs/manpage.html必须将curl stdout重定向到文件才能显示此消息。 “如果您想要 HTTP POST 或 PUT 请求的进度表,则需要使用 shell 重定向 (>)、--output 或类似方法将响应输出重定向到文件。”如果我跑

curl example.com 2> progress.txt

中没有数据progress.txt。因此我需要运行

curl example.com > example.html 2> progress.txt

如何在不将curl stdout重定向到文件的情况下访问进度表?

答案1

如果您将数据传输到另一个程序,您将获得进度表。一个基本的

curl example.com | cat

有效,但如果结果较长,您将遇到文档中提到的问题:

禁用进度表,否则会弄乱输出混合进度表和响应数据

为了避免这种情况,请使用sponge(from更多实用程序,在大多数发行版中可用):

curl example.com | sponge

相关内容