Linux/Unix命令行使用curl下载文件

2021年2月23日 0 条评论 623 次阅读 0 人点赞

我是一个macOS Unix新用户,正在编写一个小的bash shell脚本。那么我应该如何使用curl通过命令行界面直接下载文件呢?如何在Linux或类Unix系统上使用cURL下载文件?

简介:cURL既是一个命令行工具也是一个静态链接库。人们可以使用它来下载或传输数据/文件,curl支持多种协议,例如HTTP、HTTPS、FTP、SFTP等。curl命令行工具允许用户通过bash shell获取指定的URL或文件。本文将介绍如何在Linux、macOS、*BSD和类Unix操作系统上使用curl命令下载文件。

如何使用curl命令下载文件

基础语法:

  1. 使用curl抓取文件:curl https://your-domain/file.pdf
  2. 使用ftp或sftp协议获取文件:curl ftp://ftp-your-domain-name/file.tar.gzcurl ftp://ftp-your-domain-name/file.tar.gz
  3. 用户使用curl下载文件时可以设置指定文件名,执行如下命令即可:curl -o file.pdf https://your-domain-name/long-file-name.pdf
  4. 使用curl下载文件时还可以支持301重定向,执行如下命令即可:curl -L -o file.tgz http://www.cyberciti.biz/long.file.name.tgz

接下来让我们看看在Linux或类Unix系统上使用curl进行下载和上传文件的一些例子和用法。

Linux或Unix上安装curl

通过显示curl版本号验证安装是否成功

输入命令:

我们可以看到如下信息:

使用curl下载文件

命令行语法:

让我们尝试从https://www.cyberciti.biz/files/sticker/sticker_book.pdf下载一个文件并将其保存为output.pdf

或者执行如下命令亦可:

-o或--output选项允许用户为下载的文件指定一个不同的名称。如果用户没有指定输出文件名,curl默认会将其显示在终端上。假设用户输入:

那么将会看到如下进度表:

输出显示了一些有用的信息,例如:

  • % Total : 预计传输的总大小
  • % Received : 已下载字节数
  • % Xferd : 已上传字节数
  • Average Dload : 整个下载的平均速度,单位为byte/s
  • Speed Upload : 整个上传的平均速度,单位为byte/s
  • Time Total : 预期完成操作所需要的剩余时间,HH:MM:ss表示小时、分钟和秒
  • Time Spent : 从传输开始到现在的时间,HH:MM:ss表示小时、分钟和秒
  • Time Left : 预期完成操作所需要的剩余时间,HH:MM:ss表示小时、分钟和秒
  • Current Speed : 过去 5 秒的平均传输速度(当然,传输的前5秒基于较少的时间进行计算),单位为byte/s

使用curl恢复中断的下载

curl通过-C - 选项可以自动找出恢复传输的位置/方法。然后它将使用给定的输出/输入文件来计算传输中断的位置。

如何在不指定输出名称的情况下获得单个文件

用户可以按原样保存输出文件,即把输出写入一个本地文件其名称与我们想要获取的远程文件一样。例如,sticker_book.pdf是远程文件https://www.cyberciti.biz/files/sticker/sticker_book.pdf的文件名。用户可以通过-O(大写)直接保存sticker_book.pdf,而不需要通过-o或--output选项指定文件名。

处理HTTP 301重定向文件

下载文件时,远程HTTP服务器可能会发送不同的状态代码。例如,HTTP URLs经常被重定向到携带有HTTP/301状态代码的HTTPS URLs。只要通过-L选项跟随301(3xx)重定向,就可以将最终的文件下载到用户的系统上。

使用curl下载多个文件或URL

可以尝试如下命令:

用户也可以使用bash for循环

循环下载文件的另一种方式是创建一个名为urls.txt的文件,如下所示,然后运行xargs命令:

最后输入如下命令:

通过curl获取一个受密码保护的文件

用户可以尝试以下任何一种语法:

使用代理服务器下载文件

同样语法如下:

curl命令更多示例

curl命令可以提供一些有用的信息,特别是HTTP头信息。因此,用户可以利用这些信息来调试服务器问题。让我们来看一些curl命令的示例。通过-v选项可以来查看完整的请求和从Web服务器收到的响应。

不下载文件情况下获取HTTP头信息

另一个有用的选项是获取HTTP头。所有的HTTP服务器都有HEAD命令,用它来获取一个文件的头。例如,当你想只查看HTTP响应头而不下载数据或实际文件时可以使用如下命令:

使用curl时如何跳过SSL检查

如果远程服务器有自签名证书,而且用户可能希望跳过SSL检查。可以按如下方式通过-k选项实现:

下载/上传速度限速

用户可以指定希望curl用于下载和上传文件的最大传输速率。如果用户的Internet带宽有限并且希望传输过程不占用全部带宽,则此功能非常方便。除非附加了后缀,否则给定的速度默认是以字节/秒为单位的。附加“k”或“K”将以千字节为单位,“m”或“M”为兆字节,而“g”或“G”为千兆字节。例如:200K、3m 和 1G:

curl设置用户代理

某些web应用程序防火墙会在下载文件时阻止默认的curl用户代理。为避免此类问题,可以使用-A选项来设置用户代理。

使用curl上传文件

上传文件的语法如下:

例如,您可以将~/Pictures/test.png文件上传到服务器https://127.0.0.1/app/upload.php,该服务器使用名为img_file的表单参数处理文件输入,运行如下命令即可:

curl也支持同时上传多个文件,命令如下所示:

开启curl静默模式

想要隐藏进度表或错误消息?可以尝试通过-s或--silent选项打开curl的静默模式:

全文总结

与大多数Linux或Unix CLI实用程序一样,用户可以通过访问此帮助页面了解有关curl命令的更多信息。

参考资料

本文翻译自Vivek Gite博文,详情信息如下:

作者:Vivek Gite

原文地址:https://www.cyberciti.biz/faq/download-a-file-with-curl-on-linux-unix-command-line/

勇敢,和生活的艰难无关。

文章评论(0)