如果您正在寻找快速答案,该curl-O命令可让您使用curl命令行实用程序下载文件。当然,关于使用curl下载文件,要学习的不仅仅是-O参数。
这里我们将提供多个curl下载命令的示例,您可以使用这些命令来满足不同的要求。如果您是curl新手,我们建议您完整阅读本文。如果您熟悉curl但只需要快速复习一下,请随时跳到特定部分。
什么是curl?
curl是一个开源命令行实用程序,用于使用URL语法和广泛的网络协议(包括HTTP(S)、FTP、SFTP、LDAP(S)和SMTP)传输数据。curl命令行实用程序是包含libcurl库的cURL(“URL客户端”)项目的一部分。
由于curl通常“正常工作”,具有高度可移植性并默认安装在许多系统上,并且是API文档中的事实标准,因此它是开发人员和DevOps工程师中的流行工具。
先决条件
如果您运行的是现代Linux操作系统,那么您可能拥有需要遵循的一切。可以肯定的是,这里有先决条件:
- curl-curl默认安装在大多数流行的*nix操作系统上,包括macOS。它也适用于现代Windows操作系统。curl-V您可以通过从终端运行命令来检查是否安装了curl。输出应类似于:
如果您是Linux用户并且没有安装curl,您可以使用操作系统的默认包管理器(例如apt、yum或zypper)下载它。这里有各种其他操作系统的curl下载链接。
- 连接到服务器以从中下载文件-我们将为大多数示例命令使用HTTPS连接,我们建议您也这样做。但是,curl支持超过两打协议。只要您有权访问服务器以从至少支持curl之一的协议下载文件,就可以按照示例命令进行操作。请务必将我们的示例链接(例如http://speedtest.lt.cherryservers.com/test-100mb)替换为您要下载的文件的链接。
?专业提示:您可以组合curl参数。在大多数示例中,我们将坚持在curl命令中使用一个或两个参数。但是,curl也支持组合参数。例如,如果要下载文件(-O)、遵循301重定向(-L)并允许不安全的SSL证书(-k),则可以使用curl-OLk。
下载文件
使用curl下载文件的基本语法是:
curl-O<protocol>://<site>/<path/to/file>
例如,要使用HTTPS从http://speedtest.lt.cherryservers.com/test-1000mb下载1GB的虚拟日期,请使用以下命令:
curl-Ohttp://speedtest.lt.cherryservers.com/test-100mb
称为curlprogressmeter的输出类似于以下内容:
默认情况下,您下载的文件保存在您当前的工作目录中。下面是一个端到端的可视化示例。
用不同的名称保存下载的文件
该curl-O命令使用来自远程服务器的文件名将文件本地保存在当前工作目录中。您可以使用指定不同的本地文件名和下载位置curl-o。基本语法是:
curl-o</path/to/save/location/filename><protocol>://<site>/<path/to/file>
要在本地/tmp目录中将http://speedtest.lt.cherryservers.com/test-1000mb保存为mydownload.zip,请使用以下命令:
curl-o/tmp/mydownload.ziphttp://speedtest.lt.cherryservers.com/test-1000mb
指定非默认端口
默认情况下,curl使用协议的默认端口(80用于HTTP,443用于HTTPS,21用于FTP,等等)。要指定非默认端口,请附加:[port_number]到远程服务器的域名或IP地址的末尾。
基本语法是:
curl-O<protocol>://<site>:[port_number]/<path/to/file>
使用我们的http://speedtest.lt.cherryservers.com/test-1000mb示例,如果HTTP服务器在端口4040上运行,您将使用此命令:
curl-Ohttp://speedtest.lt.cherryservers.com:4040/test-1000mb
重新启动中断的下载
在某些情况下,例如当您通过较差的网络连接下载大文件时,文件下载会中断。-C-选项允许您恢复中断的下载。基本语法是:
curl-C–o<local_filename><protocol>://<site>/<path/to/file>
例如,要在本地下载为/tmp/mydownload.zip时恢复example.zip的HTTPS下载,请使用以下命令:
curl-C–o/tmp/mydownload.ziphttp://speedtest.lt.cherryservers.com/test-1000mb
在显示curl进度表之前,输出将包含类似于以下内容的文本:
一条命令下载多个文件
您可以在单个curl命令中指定多个URL,以便在一个命令中下载多个文件。
基本语法是:
curl-O<protocol>://<site_1>/<path/to/file_1>-O<protocol>://<site_2>/<path/to/file_2>
例如,要下载http://speedtest.lt.cherryservers.com/test-1000mb和http://speedtest.lt.cherryservers.com/test-100mb使用此命令:
curl-Ohttp://speedtest.lt.cherryservers.com/test-1000mb-Ohttp://speedtest.lt.cherryservers.com/test-100mb
curl进度表将显示每个下载的统计信息。对于两个URL,输出将类似于以下内容:
如果您有很长的URL列表,您可以将它们添加到一个文本文件中,然后使用xargs.为了演示,假设我们有一个curlsites.txt文件,其中包含我们的URL,将每个URL放在一个新行上:
http://speedtest.lt.cherryservers.com/test-1000mb
http://speedtest.lt.cherryservers.com/test-100mb
我们现在可以使用xargs命令curl和我们的curlsites.txt文件作为输入来下载每个文件:
xargs-n1curl-O<curlsites.txt
在Pralel中下载多个文件
通常,curl一个一个地处理URL,上面的xargs示例也是如此。但是,您可以将-P参数添加到xargs以并行下载多个文件。例如,此命令将并行运行两个curl下载。
xargs-P2-n1curl-O<curlsites.txt
有关xargs及其选项的更多详细信息,请查看xargs手册页。
使用速率限制
速率限制让您可以为curl请求指定最大传输速率。将速率限制应用于curl下载请求的基本语法是:
curl–limit-rate<speed>-O<protocol>://<site>/<path/to/file>
默认情况下,<speed>以每秒字节数为单位。您可以附加以下后缀之一来更改度量单位:
- K或k=千字节
- M或m=兆字节
- G或g=千兆字节
例如,要在我们的示例下载中设置每秒1000字节的速率限制,我们可以使用以下命令:
curl–limit-rate1000-Ohttp://speedtest.lt.cherryservers.com/test-100mb
或者这个命令:
curl–limit-rate1k-Ohttp://speedtest.lt.cherryservers.com/test-100mb
要限制为每秒100兆字节:
curl–limit-rate100m-Ohttp://speedtest.lt.cherryservers.com/test-100mb
请注意,curl会尝试平均传输速度以不超过该<speed>值。当您第一次使用该–limit-rate选项运行curl时,您可能会看到速度高于指定值,<speed>但它们应该会很快趋于平稳。
自动中止慢速下载
如果您下载文件的服务器速度太慢,您可能希望自动中止连接。您可以使用-Y(or–speed-limit)和-y(or–speed-time)选项。
-Y(或–speed-limit)选项定义速度(以字节/秒为单位)。(-yor–speed-time)选项指定以秒为单位的时间量。-Y如果下载速度在定义的时间内低于定义的速度-y,curl将中止下载。-Y如果-y未指定,则默认时间为30秒。下面是三个示例来演示。
- 如果速度低于~100KB/s(千字节每秒)持续10秒,则中止下载:
curl-O-Y100000-y10http://speedtest.lt.cherryservers.com/test-1000mb - 如果速度低于~100MB/s(每秒兆字节)达15秒,则中止下载:
curl-O-Y100000000-y15http://speedtest.lt.cherryservers.com/test-1000mb - 如果速度低于1KB/s持续30秒,则中止下载(默认30秒,因此无需指定-y):
curl-O-Y1000http://speedtest.lt.cherryservers.com/test-1000mb
如果curl由于传输速度限制而中止下载,它将打印类似于以下内容的错误消息:
显示下载状态栏
–progress-bar您可以使curl显示带参数的进度条,而不是标准进度条。进度条将以百分比形式显示下载进度,并在终端上显示#符号。
您可以将该参数附加–progress-bar到大多数curl命令。以下是带参数的基本语法HTTPS下载命令–progress-bar:
curl-O<protocol>://<site>/<path/to/file>–progress-bar
进度条输出类似于:
使Curl遵循301重定向
从HTTP(S)服务器下载文件时,301重定向很常见。要让curl遵循301重定向,请使用-L参数。
下面是带有-L参数的301重定向的基本语法示例:
curl-OL<protocol>://<site>/<path/to/file>
curl-L-o</path/to/save/location/filename><protocol>://<site>/<path/to/file>
使用基本身份验证
虽然像OAuth2.0这样的现代身份验证形式在现代HTTP服务器上更为常见,但在某些情况下,可以使用需要用户名和密码的基本身份验证来保护下载。例如,FTP下载是基本身份验证的典型用例。-u您可以使用参数提供用于基本身份验证的用户名和密码。
curl下载请求的基本身份验证的基本语法是:
curl-u<username>:<password>-O<protocol>://<site>/<path/to/file>
抑制卷曲输出
您可以使用参数抑制curl的输出-s。使用curl静默下载文件的基本语法是:
curl-Os<protocol>://<site>/<path/to/file>
此命令就像-O一样下载文件,但不会将进度或统计信息打印到标准输出。
允许不安全的SSL/TLS证书
在某些情况下,您可能希望通过HTTPS下载文件,即使服务器具有无效证书或自签名证书也是如此。您可以使用-k选项让curl在不验证TLS/SSL证书的情况下继续。请注意,此行为不安全!
以下是允许不安全的SSL证书进行curl下载的基本语法:
curl-Okhttps://<site>/<path/to/file>
如果您有意连接到具有不安全TLS/SSL证书的站点,-k参数可以帮助解决以下错误:
我们还建议访问错误消息中提到的官方页面,以获取有关curl和TLS/SSL的更多详细信息。
使用FTP和SFTP下载文件
除了HTTP(S)之外,FTP和SFTP也是curl可用于下载文件的流行协议。您可以通过在命令中指定这些协议来使用FTP或SFTP,就像我们在其他示例中使用HTTPS一样。
由于FTP和SFTP服务器通常需要用户名和密码,因此我们将在示例中使用-u参数。
使用curl进行FTP下载的基本语法:
curl-u<username>:<password>-Oftp://<site>/<path/to/file>
对于SFTP:
curl-u<username>:<password>-Osftp://<site>/<path/to/file>
本文来源:https://www.yuntue.com/post/68023.html | 云服务器网,转载请注明出处!

微信扫一扫打赏
支付宝扫一扫打赏