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

linuxcurl命令可以做的不仅仅是下载文件。找出curl的功能,以及何时应该使用它而不是wget。...

linuxcurl命令可以做的不仅仅是下载文件。找出curl的功能,以及何时应该使用它而不是wget。

curl和wget有什么区别?

人们常常很难确定wget和curl命令的相对优势。这些命令确实有一些功能重叠。它们各自可以从远程位置检索文件,但这就是相似性的终点。

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

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

curl不仅仅局限于网站。curl支持20多种协议,包括HTTP、HTTPS、SCP、SFTP和FTP。而且可以说,由于它对Linux管道的出色处理,curl可以更容易地与其他命令和脚本集成。

curl的作者有一个网页,描述了他所看到的curl和wget之间的区别。

安装卷曲

在用于研究本文的计算机中,fedora31和manjaro18.1.0已经安装了curl。curl必须安装在ubuntu18.04 LTS上。在Ubuntu上,运行以下命令进行安装:

sudo apt-get install curl

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

卷曲版本

--version选项使curlreport成为其版本。它还列出了它支持的所有协议。

curl --version

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

检索网页

如果我们将curl指向一个网页,它将为我们检索它。

curl https://www.bbc.com

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

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

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

注意:如果你不告诉curl你想要一个文件,它总是会把它转储到终端窗口。如果正在检索的文件是二进制文件,则结果可能无法预测。shell可能试图将二进制文件中的某些字节值解释为控制字符或转义序列。

将数据保存到文件

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

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

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

这次我们看不到检索到的信息,它直接为我们发送到文件。因为没有要显示的终端窗口输出,curl输出一组进度信息。

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

在本例中,curl检测到输出被重定向到一个文件,并且生成进度信息是安全的。

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

提供的信息是:

  • %合计:要检索的总金额。
  • %已接收:到目前为止检索到的数据的百分比和实际值。
  • %Xferd:如果正在上载数据,则为实际发送的百分比。
  • 平均****:平均****。
  • 平均上传速度:平均上传速度。
  • 总时间:传输的估计总持续时间。
  • 已用时间:到目前为止此传输所用的时间。
  • 剩余时间:完成传输的估计剩余时间
  • 当前速度:此传输的当前传输速度。

因为我们将curl的输出重定向到一个文件,所以现在有一个名为bbc.html.”

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

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

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

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

我们不必重定向输出来创建文件。我们可以使用-o(output)选项创建一个文件,并告诉curl创建该文件。在这里,我们使用-o选项并提供要创建的文件的名称“bbc.html.”

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

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

使用进度条监视下载

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

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

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

重新启动中断的下载

重新启动已终止或中断的下载很容易。让我们开始下载一个相当大的文件。我们将使用最新的ubuntu18.04长期支持版本。我们使用--output选项指定要保存到的文件名:“ubuntu180403.iso”

curl --output ubuntu18043.iso http://releases.ubuntu.com/18.04.3/ubuntu-18.04.3-desktop-amd64.iso

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

下载开始并朝着完成的方向前进。

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

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

要重新启动下载,请使用-C(continue at)选项。这将导致curl在目标文件中的指定点或偏移处重新启动下载。如果使用连字符作为偏移量,curl将查看文件中已下载的部分,并确定用于自身的正确偏移量。

curl -C - --output ubuntu18043.iso http://releases.ubuntu.com/18.04.3/ubuntu-18.04.3-desktop-amd64.iso

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

下载已重新启动。curl报告重新启动时的偏移量。

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

检索http头

使用-I(head)选项,您只能检索HTTP头。这与向web服务器发送HTTP HEAD命令相同。

curl -I www.twitter.com

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

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

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

下载多个URL

使用xargs我们可以一次下载多个url。也许我们想下载一系列网页,组成一篇文章或教程。

将这些URL复制到编辑器并将其保存到名为“URL到”的文件中-下载.txt“我们可以使用xargs将文本文件的每一行的内容作为一个参数,它将依次提供给curl。

https://tutorials.ubuntu.com/tutorial/tutorial-create-a-u**-stick-on-ubuntu#0 https://tutorials.ubuntu.com/tutorial/tutorial-create-a-u**-stick-on-ubuntu#1 https://tutorials.ubuntu.com/tutorial/tutorial-create-a-u**-stick-on-ubuntu#2 https://tutorials.ubuntu.com/tutorial/tutorial-create-a-u**-stick-on-ubuntu#3 https://tutorials.ubuntu.com/tutorial/tutorial-create-a-u**-stick-on-ubuntu#4 https://tutorials.ubuntu.com/tutorial/tutorial-create-a-u**-stick-on-ubuntu#5

这是让xargs将这些url一次传递给curl所需的命令:

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

请注意,此命令使用-O(远程文件)输出命令,该命令使用大写字母“O”。此选项使curl以文件在远程服务器上的名称保存检索到的文件。

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

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

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

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

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

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

从ftp服务器下载文件

将curl与文件传输协议(FTP)服务器结合使用很容易,即使您必须使用用户名和密码进行身份验证。要使用curl传递用户名和密码,请使用-u(user)选项,并键入用户名、冒号“:”和密码。不要在结肠前后留空格。

这是一个免费的测试FTP*****的丽贝克斯。测试FTP站点有一个预先设置的用户名“demo”,密码是“password”。不要在生产或“真实”FTP服务器上使用这种弱用户名和密码。

curl -u demo:password ftp://test.rebex.net

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

curl指出我们将它指向一个FTP服务器,并返回服务器上存在的文件列表。

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

此服务器上的唯一文件是“自述文件.txt文件,长度为403字节。让我们找回它。使用与刚才相同的命令,并附加文件名:

curl -u demo:password ftp://test.rebex.net/readme.txt

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

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

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

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

curl -O -u demo:password ftp://test.rebex.net/readme.txt

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

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

ls -hl readme.txt

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

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

向远程服务器发送参数

某些远程服务器将接受发送给它们的请求中的参数。例如,这些参数可以用于格式化返回的数据,也可以用于选择用户希望检索的确切数据。通常可以使用curl与web应用程序编程接口(api)交互。

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

curl https://api.ipify.org

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

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

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

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

curl https://www.googleapis.com/books/v1/volumes?q=i**n:0131103628

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

返回的数据很全面:

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

有时卷曲,有时弯曲

如果我想从一个网站下载内容,并让网站的树结构递归搜索该内容,我会使用wget。

如果我想与远程服务器或API交互,或者可能下载一些文件或网页,我会使用curl。特别是如果该协议是wget不支持的众多协议之一的话。

  • 发表于 2021-04-02 22:46
  • 阅读 ( 194 )
  • 分类:互联网

你可能感兴趣的文章

如何在没有浏览器的情况下使用web

...一个放在第一位(不寻常,但不是不可能)。你需要知道如何在没有浏览器的情况下下载Chrome(或你选择的浏览应用程序)。 浏览器被阻止:您的浏览器也有可能被阻止联机。您的计算机上是否正在运行家长设置...

  • 发布于 2021-03-11 17:22
  • 阅读 ( 258 )

linux终端的5个联网命令

... 对于同时运行多个命令,请看一下如何在带屏幕的Linux终端上执行多任务。 ...

  • 发布于 2021-03-13 15:30
  • 阅读 ( 212 )

如何在linux上安装和使用powershell

... 在本文中,我将向您展示如何在Linux上安装、运行和使用PowerShell! ...

  • 发布于 2021-03-16 02:34
  • 阅读 ( 303 )

如何在一个小时内安装一台linux媒体服务器

为您的电视和电影收藏设计终极媒体服务器可能是一项挑战。你应该使用什么硬件,你应该安装什么操作系统,你应该运行什么样的软件? ...

  • 发布于 2021-03-21 20:50
  • 阅读 ( 321 )

转换json并使用jq使其可读

... 如何下载和安装jq ...

  • 发布于 2021-03-27 02:07
  • 阅读 ( 199 )

如何使用crontab自动化linux中的重复任务

... 在这里,您将了解什么是crontab,如何添加自动化作业,以及一些实际示例。 ...

  • 发布于 2021-03-28 04:45
  • 阅读 ( 207 )

如何使用linux的screen命令

...窗口推到后台(称为“分离”)。当你想看到你的进程是如何进行的,你可以把窗口拉到前台(“重新连接”)并再次使用它。这对于您不希望通过关闭终端窗口意外终止的长进程来说非常有用。 一旦运行了屏幕会话,就可以...

  • 发布于 2021-04-02 11:06
  • 阅读 ( 174 )

linux下如何使用rclone备份google驱动

googledrive仍然没有正式的Linux客户端,但是您可以直接从命令行使用rclone实用程序备份到googledrive。我们教你怎么做。 linux上的google drive在哪里? 尽管2012年承诺Linux支持“很快就会到来”,但没有迹象表明Google会为GoogleDrive生产...

  • 发布于 2021-04-02 18:51
  • 阅读 ( 172 )

37个重要的linux命令

...程序时创建的squashfs伪文件系统。 df -h -x squashfs 相关:如何从Linux终端查看可用磁盘空间和磁盘使用情况 8差异 diff命令比较两个文本文件并显示它们之间的差异。有许多选项可根据您的要求定制显示器。 -y(并排)选项并排显...

  • 发布于 2021-04-03 15:04
  • 阅读 ( 181 )

如何使用bash从subreddit中获取主题列表

Reddit为每个subreddit提供JSON提要。下面是如何创建一个Bash脚本,从您喜欢的任何subreddit下载并解析帖子列表。这只是Reddit的JSON提要可以做的一件事。 安装卷曲和jq 我们将使用curl从Reddit和jq获取JSON提要,解析JSON数据并从结果中...

  • 发布于 2021-04-03 18:06
  • 阅读 ( 204 )
msmw3951
msmw3951

0 篇文章

相关推荐