Linux 下命令行CURL的15种常见示例!

2019-12-17 12:38:33 浏览数 (1)

在本教程中,我们将介绍Linux中的cURL命令。我们会给出一些示例来指导您了解这个强大的实用程序的功能,帮助您理解它所能实现的所有功能。

cURL命令用于使用其20多种受支持协议之一,将数据下载或上传到服务器。此数据可以是文件、电子邮件或网页。

目录

  1. 什么是cURL命令?
  2. 下载文件
  3. 遵循重定向
  4. 停止并继续下载
  5. 指定超时
  6. 使用用户名和密码
  7. 使用代理
  8. 分块下载大文件
  9. 客户端证书
  10. Silent cURL
  11. 获取标题
  12. 多个headers
  13. 发布(上传)文件
  14. 发送电子邮件
  15. 阅读电子邮件
  16. cURL和wget之间的区别

什么是cURL命令?

cURL是与网站或API进行交互,向终端发送请求并显示响应或将数据记录到文件的理想工具。有时,它用作较大脚本的一部分,将检索到的数据交给其他函数进行处理。

由于cURL可用于从服务器检索文件,所以通常用于下载网站的一部分。它可以很好地执行此功能,但有时wget命令更适合这项工作。

在本文后面的内容中,我们将介绍wget和cURL之间的一些异同。

我们将在下面的部分中向您展示如何开始使用cURL。

下载文件

我们可以给cURL的最基本命令是下载网站或文件。除非我们指定一个不同的协议,否则cURL将使用HTTP作为其默认协议。要下载网站,只需发出以下命令:

代码语言:javascript复制
$ curl http://www.google.com

当然,请输入要检索的任何网站或页面。

像这样执行基本命令而没有其他选项很少有用,因为这只会告诉cURL检索您所提供页面的源代码。

当我们运行命令时,我们的终端充满了HTML和其他Web脚本代码——在这种形式下,对我们来说不是特别有用。

让我们将网站下载为HTML文档,这样就可以显示内容,可以添加-output选项来实现cURL。

代码语言:javascript复制
$ curl www.likegeeks.com --output likegeeks.html

现在,我们下载的网站可以打开并显示在浏览器中。

如果您要下载在线文件,则命令大致相同。但是请确保将-output选项附加到cURL中,就像我们在上面的示例中所做的那样。

如果您没有这样做,则cURL会将在线文件的二进制输出发送到您的终端,这可能会导致其发生故障。

这是我们开始下载500KB Word文档时的样子。

Word文档开始下载,并且终端中显示下载的当前进度。下载完成后,该文件将在我们保存该文件的目录中可用。

在此示例中,未指定目录,因此将其保存到当前的工作目录(运行cURL命令的目录)。

另外,您是否注意到我们在cURL命令中指定的-L选项了么?为了下载此文件,这是必要的,我们将在下一部分中介绍它的功能。

遵循重定向

如果在尝试对网站进行URL生成时输出为空,则可能意味着该网站告诉cURL重定向到其他URL。默认情况下,cURL不会遵循重定向,但是您可以使用 -L switch来告诉它。

代码语言:javascript复制
$ curl -L www.likegeeks.com

在本文的研究中,我们发现有必要在大多数网站上指定-L,因此请务必记住这一小技巧。默认情况下,您甚至可能希望将其附加到大多数cURL命令中。

停止并继续下载

如果您的下载中断了,或者您需要下载一个大文件但又不想一次完成所有操作,所以cURL提供了一种选项,可以从中断处继续传输。

要手动停止传输,您可以使用ctrl c组合键结束cURL进程,就像停止当前正在运行的几乎所有进程一样。

我们的下载已经开始,但是被ctrl c中断了,现在让我们使用以下语法恢复下载:

代码语言:javascript复制
$ curl -C - example.com/some-file.zip --output MyFile.zip

-C switch是恢复我们文件传输的设备,但还要注意,它后面紧跟一个破折号(-)。这告诉cURL继续文件传输,但是实现这一步,首先要查看已经下载的部分,找到下载的最后一个字节才可以确定从何处可以恢复。

这时候我们的文件传输已恢复,可以继续完成下载。

指定超时

如果您希望cURL在您不做操作之后的一段时间还可以继续之前的工作,那么可以在命令中指定超时,这特别有用,因为cURL中的某些操作默认情况下没有超时,所以如果您不希望其无限期挂起,则需要指定一个。

您可以使用-m switch指定执行命令所需的最长时间。经过指定的时间后,cURL将退出正在执行的操作,即使它正在下载或上传文件。

cURL会以秒为单位指定您想要的最长时间。因此,要在一分钟后超时,该命令将如下所示:

代码语言:javascript复制
$ curl -m 60 example.com

您可以使用cURL指定的另一种超时类型是用于链接的时间量。这有助于确保cURL不会花费过多的时间来尝试连接处于脱机状态或无法访问的主机。

它也接受秒作为参数。该选项被写为–connect-timeout。

代码语言:javascript复制
  $ curl --connect-timeout 60 example.com

使用用户名和密码

您可以使用-u switch在cURL命令中指定用户名和密码。例如,如果您想通过FTP服务器进行身份验证,则语法如下所示:

代码语言:javascript复制
  $ curl -u username:password ftp://example.com

您可以将其用于任何协议,但是FTP通常用于诸如此类的简单文件传输。

如果要下载上面的屏幕快照中显示的文件,我们只需使用文件的完整路径发出相同的命令。

代码语言:javascript复制
$ curl -u username:password ftp://example.com/readme.txt

使用代理

在连接主机之前,很容易直接使用cURL来使用代理。cURL将默认使用HTTP代理,除非您另外指定。

使用-x switch定义代理。由于在此示例中未指定协议,因此cURL将假定它是HTTP代理。

代码语言:javascript复制
$ curl -x 192.168.1.1:8080 http://example.com

此命令将使用端口8080上的192.168.1.1作为代理连接到example.com。

您也可以将其与其他协议一起使用。下面是一个使用HTTP代理将UR cURLL到FTP服务器并检索文件的示例。

代码语言:javascript复制
$ curl -x 192.168.1.1:8080 ftp://example.com/readme.txt

cURL支持许多其他类型的代理和与这些代理一起使用的选项,但进一步扩展将超出本指南的范围。请查阅cURL手册页,以获取有关代理 tunneling,SOCKS代理,身份验证等的更多信息。

分块下载多个文件

我们已经展示了如何停止和恢复文件传输,但是如果我们希望cURL仅下载文件的一部分怎么办?这样,我们可以下载多个块文件。

如果您需要保持下载上限或类似限制,则可以仅下载文件的某些部分。 –range标志用于完成此操作。

大小必须以字节为单位。因此,如果我们想以100 MB的块大小下载最新的Ubuntu .iso文件,则第一个命令将如下所示:

代码语言:javascript复制
$ curl --range 0-99999999 http://releases.ubuntu.com/18.04/ubuntu-18.04.3-desktop-amd64.iso ubuntu-part1

第二个命令将需要在下一个字节提取并下载另一个100 MB的块。

代码语言:javascript复制
$ curl --range 0-99999999 http://releases.ubuntu.com/18.04/ubuntu-18.04.3-desktop-amd64.iso ubuntu-part1
代码语言:javascript复制
$ curl --range 100000000-199999999 http://releases.ubuntu.com/18.04/ubuntu-18.04.3-desktop-amd64.iso ubuntu-part2

重复此过程,直到下载了所有块。最后一步是将这些块组合到一个文件中,这可以使用cat命令来完成。

代码语言:javascript复制
$ cat ubuntu-part? > ubuntu-18.04.3-desktop-amd64.iso

客户端证书

要使用证书身份验证而不是基本身份验证访问服务器,可以使用–cert选项指定证书文件。

代码语言:javascript复制
$ curl --cert path/to/cert.crt:password ftp://example.com

cURL对于证书文件的格式有很多选项。

还有更多与证书相关的选项:–cacert、–cert-status、–cert-type等。请查看手册页以获取选项的完整列表。

Silent cURL

如果您不想显示cURL的进度表和错误消息,则-s switch可提供该功能。它仍然会输出您请求的数据,因此,如果您希望命令100%保持静音,则需要将输出定向到一个文件中。

将此命令与-O flag结合使用可将文件保存在当前的工作目录中。这将确保cURL返回0输出。

代码语言:javascript复制
$ curl -s -O http://example.com

或者,您可以使用–output选项选择保存文件的位置并指定名称。

代码语言:javascript复制
$ curl -s http://example.com --output index.html

获取标题

使用cURL来获取远程地址的标题非常简单,您只需要使用-I选项即可。

代码语言:javascript复制
$ curl -I example.com

如果将此选项与–L选项结合使用,则cURL将返回其重定向到的每个地址的headers。

代码语言:javascript复制
$ curl -I -L example.com

多个标题

您可以使用-H选项将header传递给cURL。要传递多个header,您只需多次使用-H选项。这是一个例子:

代码语言:javascript复制
$ curl -H 'Connection: keep-alive' -H 'Accept-Charset: utf-8 ' http://example.com

发布(上传)文件

POST是网站接受数据的常用方式。例如,当您在线填写表格时,很有可能是使用POST方法从浏览器发送数据。要将数据以这种方式发送到网站,请使用-d选项。

代码语言:javascript复制
$ curl -d 'name=geek&location=usa' http://example.com

要上传文件而不是文本,语法应如下所示:

代码语言:javascript复制
  $ curl -d @filename http://example.com

根据需要使用多个-d标志,以指定要尝试上载的所有不同数据或文件名。

如果要将文件上传到FTP服务器,则可以使用-T选项。

代码语言:javascript复制
$ curl -T myfile.txt ftp://example.com/some/directory/

发送电子邮件

发送电子邮件只是将数据从您的计算机(或其他设备)上传到电子邮件服务器。由于cURL能够上传数据,因此我们可以使用它来发送电子邮件。有很多选项,但是这里有一个有关如何通过SMTP服务器发送电子邮件的示例:

代码语言:javascript复制
$ curl smtp://mail.example.com --mail-from me@example.com --mail-rcpt john@domain.com –upload-file email.txt

您的电子邮件文件需要正确格式化。像这样:

代码语言:javascript复制
$ cat email.txt
 
From: Web Administrator <me@example.com>
 
To: John Doe <john@domain.com>
 
Subject: An example email
 
Date: Sat, 7 Dec 2019 02:10:15
 
 
 
 
John,
 
Hope you have a great weekend.
 
-Admin

像往常一样,可以在cURL的手册页中找到更详细、更专业的选项。

阅读电子邮件

cURL支持IMAP(和IMAPS)和POP3,两者均可用于从邮件服务器检索电子邮件。

像这样使用IMAP登录:

代码语言:javascript复制
$ curl -u username:password imap://mail.example.com

此命令将列出可用的邮箱,但不查看任何特定的邮件。为此,请使用–X选项指定消息的UID。

代码语言:javascript复制
$ curl -u username:password imap://mail.example.com -X 'UID FETCH 1234'

cURL和wget之间的区别

有时人们会混淆cURL和wget,因为它们都能够从服务器检索数据。但这是他们唯一的共同点。

我们在本文中展示了cURL的功能。 wget提供了一组不同的函数。 wget是下载网站的最佳工具,并且能够递归遍历目录和链接以下载整个网站。

要下载网站,请使用wget。如果使用HTTP或HTTPS以外的其他协议或用于上传文件,请使用cURL。 cURL也是从Web下载单个文件的不错选择,不过wget也做得很好。

0 人点赞