如何使用curl从Linux命令行下载文件

的Linux 卷曲 该命令比下载文件能做的更多。找出什么 卷曲 有能力,何时应该使用它代替 get.

curl vs. wget:有什么区别?

人们经常努力找出自己的相对优势。 get卷曲 命令。这些命令确实有一些功能重叠。他们每个人都可以从远程位置检索文件,但这就是相似性结束的地方。

get 是下载内容和文件的绝佳工具。它可以下载文件,网页和目录。它包含智能例程,可以遍历网页中的链接并在整个网站上递归下载内容。作为命令行下载管理器,它是无与伦比的。

卷曲 完全满足不同的需求。是的,它可以检索文件,但是不能以递归方式浏览网站以寻找要检索的内容。什么 卷曲 实际上,通过向远程系统发出请求,并检索和显示它们对您的响应,您可以与这些系统进行交互。这些响应很可能是网页内容和文件,但是由于curl请求提出的“问题”,它们也可能包含通过Web服务或API提供的数据。

卷曲 不仅限于网站。 卷曲 支持20多种协议,包括HTTP,HTTPS,SCP,SFTP和FTP。可以说,由于其对Linux管道的出色处理, 卷曲 可以更轻松地与其他命令和脚本集成。

作者 卷曲 有一个网页描述了他看到的之间的差异 卷曲get.

安装卷发

在用于研究本文的计算机中,Fedora 31和Manjaro 18.1.0具有 卷曲 已安装。 卷曲 必须在Ubuntu 18.04 LTS上安装。在Ubuntu上,运行以下命令进行安装:

须藤apt-get install curl

卷曲版本

- 版本 选项使卷曲报告其版本。它还列出了它支持的所有协议。

curl-版本

检索网页

如果我们指出 卷曲 在网页上,它将为我们检索它。

curl //www.bbc.com

但是它的默认操作是将其作为源代码转储到终端窗口中。

谨防:如果您不告诉 卷曲 您想要将某些内容存储为文件,它将 总是 将其转储到终端窗口。如果要检索的文件是二进制文件,则结果可能无法预测。 Shell可能会尝试将二进制文件中的某些字节值解释为控制字符或转义序列。

将数据保存到文件

让我们告诉curl将输出重定向到文件中:

curl //www.bbc.com> bbc.html

这次我们没有看到检索到的信息,而是直接将其发送给我们。由于没有要显示的终端窗口输出, 卷曲 输出一组进度信息。

在上一个示例中没有这样做,因为进度信息会分散在整个网页源代码中,因此 卷曲 自动抑制它。

在这个例子中卷曲 检测到输出正在重定向到文件,并且可以安全地生成进度信息。

提供的信息是:

  • % 全部的:要检索的总金额。
  • % 已收到:到目前为止检索到的数据的百分比和实际值。
  • %Xferd:如果正在上传数据,则百分比和实际发送的百分比。
  • 平均速度负荷:平均下载速度。
  • 平均速度上传:平均上传速度。
  • 总时间:估算的总传输时间。
  • 所花费的时间:到目前为止,此传输已用的时间。
  • 剩下的时间:完成转移所需的估计时间
  • 现在的速度:此传输的当前传输速度。

因为我们重定向了输出 卷曲 到一个文件,我们现在有一个名为“ bbc.html”的文件。

双击该文件将打开您的默认浏览器,以便显示检索到的网页。

请注意,浏览器地址栏中的地址是此计算机上的本地文件,而不是远程网站。

我们不必 重新导向 输出以创建文件。我们可以使用 -o (输出)选项,并告诉 卷曲 创建文件。在这里,我们使用 -o 选项,并提供我们要创建的文件名“ bbc.html”。

curl -o bbc.html //www.bbc.com

使用进度条监视下载

要将基于文本的下载信息替换为简单的进度条,请使用 -# (进度条)选项。

curl -x -o bbc.html //www.bbc.com

重新开始中断的下载

重新启动已终止或中断的下载很容易。让我们开始下载一个较大的文件。我们将使用最新版本的Ubuntu 18.04长期支持。我们正在使用 - 输出 选项以指定我们希望将其保存到的文件的名称:“ ubuntu180403.iso”。

curl-输出ubuntu18043.iso //releases.ubuntu.com/18.04.3/ubuntu-18.04.3-desktop-amd64.iso

下载开始,并逐步完成。

如果我们强行中断下载 Ctrl + C ,我们返回到命令提示符,并且下载被放弃。

要重新开始下载,请使用 -C (继续)选项。这引起 卷曲 在指定点重新开始下载,或 抵消 在目标文件中。如果使用连字符 - 作为偏移量 卷曲 将查看文件已下载的部分,并确定要用于其自身的正确偏移量。

curl -C--输出ubuntu18043.iso //releases.ubuntu.com/18.04.3/ubuntu-18.04.3-desktop-amd64.iso

重新开始下载。 卷曲 报告重新启动的偏移量。

检索HTTP标头

随着 -一世 (head)选项,则只能检索HTTP标头。这与将HTTP HEAD命令发送到Web服务器相同。

curl -I www.twitter.com

该命令仅检索信息;它不会下载任何网页或文件。

下载多个URL

使用 xargs 我们可以一次下载多个URL。也许我们想下载构成单个文章或教程的一系列网页。

将这些URL复制到编辑器,然后将其保存到名为“ urls-to-download.txt”的文件中。我们可以用 xargs 将文本文件每一行的内容作为参数,将其馈送到 卷曲, 反过来。

//tutorials.ubuntu.com/tutorial/tutorial-create-a-usb-stick-on-ubuntu#0 //tutorials.ubuntu.com/tutorial/tutorial-create-a-usb-stick-on-ubuntu#1 //tutorials.ubuntu.com/tutorial/tutorial-create-a-usb-stick-on-ubuntu#2 //tutorials.ubuntu.com/tutorial/tutorial-tutorial-create-a-usb-stick-on-ubuntu#3 //tutorials.ubuntu.com/tutorial/tutorial-create-a-usb-stick-on-ubuntu#4 //tutorials.ubuntu.com/tutorial/tutorial-tutorial-create-a-usb-stick-on-ubuntu#5

这是我们需要使用的命令 xargs 将这些网址传递给 卷曲 一次一个:

xargs -n 1 curl -O <URLs-to-download.txt

请注意,此命令使用 -O (远程文件)输出命令,该命令使用大写的“ O”。此选项导致 卷曲 以与远程服务器上的文件名相同的名称保存检索到的文件。

-n 1 选项告诉 xargs 将文本文件的每一行都视为一个参数。

运行命令时,您会看到多次下载开始和结束,一个接一个地下载。

在文件浏览器中签入显示多个文件已下载。每个人都有它在远程服务器上拥有的名称。

有关的:如何在Linux上使用xargs命令

从FTP服务器下载文件

使用 卷曲 即使您必须使用用户名和密码进行身份验证,使用文件传输协议(FTP)服务器也很容易。通过以下方式传递用户名和密码: 卷曲 使用 -u (用户)选项,然后键入用户名,冒号“:”和密码。不要在冒号之前或之后放置空格。

这是由Rebex托管的免费测试的FTP服务器。测试FTP站点的预设用户名是“ demo”,密码是“ password”。不要在生产或“真实” FTP服务器上使用这种类型的弱用户名和密码。

curl -u演示:密码ftp://test.rebex.net

卷曲 确定我们将其指向FTP服务器,并返回该服务器上存在的文件的列表。

该服务器上唯一的文件是“ readme.txt”文件,其长度为403个字节。让我们找回它。使用与之前相同的命令,并附加文件名:

curl -u演示:密码ftp://test.rebex.net/readme.txt

检索文件并 卷曲 在终端窗口中显示其内容。

在几乎所有情况下,将检索到的文件保存给我们而不是显示在终端窗口中将更加方便。再一次,我们可以使用 -O (远程文件)输出命令,将文件保存到磁盘上,文件名与远程服务器上的文件名相同。

curl -O -u演示:密码ftp://test.rebex.net/readme.txt

检索文件并将其保存到磁盘。我们可以用 ls 检查文件详细信息。它与FTP服务器上的文件具有相同的名称,并且长度相同,为403个字节。

ls -hl readme.txt

有关的:如何在Linux上使用FTP命令

将参数发送到远程服务器

某些远程服务器将在发送给它们的请求中接受参数。例如,这些参数可用于格式化返回的数据,或者它们可用于选择用户希望检索的确切数据。通常可以使用以下方式与Web应用程序编程接口(API)进行交互 卷曲.

举一个简单的例子,可以查询ipify网站上的API,以确定您的外部IP地址。

curl //api.ipify.org

通过添加 格式 该命令的参数,值为“ json”,我们可以再次请求我们的外部IP地址,但是这次返回的数据将以JSON格式编码。

curl //api.ipify.org?format=json

这是另一个利用Google API的示例。它返回描述一本书的JSON对象。您必须提供的参数是一本书的国际标准书号(ISBN)编号。您可以在大多数书籍的封底中找到这些书,通常在条形码的下面。我们将在此处使用的参数是“ 0131103628”。

curl //www.googleapis.com/books/v1/volumes?q=isbn:0131103628

返回的数据是全面的:

有时卷曲,有时wget

如果我想从网站上下载内容,并以递归方式搜索该网站的树状结构,请使用 get.

如果我想与远程服务器或API进行交互,并且可能要下载一些文件或网页,则可以使用 卷曲。特别是如果协议是不支持的众多协议之一 get.


$config[zx-auto] not found$config[zx-overlay] not found