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

来自公众号:CU技术社区

在本教程中,我们将介绍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作为其默认协议。要下载网站,只需发出以下命令:

$ curl http://www.google.com

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

image

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

image

当我们运行命令时,我们的终端充满了HTML和其他Web脚本代码——在这种形式下,对我们来说不是特别有用。让我们将网站下载为HTML文档,这样就可以显示内容,可以添加-output选项来实现cURL。

$ curl www.likegeeks.com --output likegeeks.html
image

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

image

如果您要下载在线文件,则命令大致相同。但是请确保将-output选项附加到cURL中,就像我们在上面的示例中所做的那样。如果您没有这样做,则cURL会将在线文件的二进制输出发送到您的终端,这可能会导致其发生故障。这是我们开始下载500KB Word文档时的样子。

image

Word文档开始下载,并且终端中显示下载的当前进度。下载完成后,该文件将在我们保存该文件的目录中可用。在此示例中,未指定目录,因此将其保存到当前的工作目录(运行cURL命令的目录)。另外,您是否注意到我们在cURL命令中指定的-L选项了么?为了下载此文件,这是必要的,我们将在下一部分中介绍它的功能。

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

$ curl -L www.likegeeks.com
image

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

停止并继续下载
如果您的下载中断了,或者您需要下载一个大文件但又不想一次完成所有操作,所以cURL提供了一种选项,可以从中断处继续传输。
要手动停止传输,您可以使用ctrl + c组合键结束cURL进程,就像停止当前正在运行的几乎所有进程一样。

image

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

$ curl -C - example.com/some-file.zip --output MyFile.zip

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

image

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

指定超时
如果您希望cURL在您不做操作之后的一段时间还可以继续之前的工作,那么可以在命令中指定超时,这特别有用,因为cURL中的某些操作默认情况下没有超时,所以如果您不希望其无限期挂起,则需要指定一个。
您可以使用-m switch指定执行命令所需的最长时间。经过指定的时间后,cURL将退出正在执行的操作,即使它正在下载或上传文件。cURL会以秒为单位指定您想要的最长时间。因此,要在一分钟后超时,该命令将如下所示:

$ curl -m 60 example.com

您可以使用cURL指定的另一种超时类型是用于链接的时间量。这有助于确保cURL不会花费过多的时间来尝试连接处于脱机状态或无法访问的主机。
它也接受秒作为参数。该选项被写为–connect-timeout。

  $ curl --connect-timeout 60 example.com

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

  $ curl -u username:password ftp://example.com
image

您可以将其用于任何协议,但是FTP通常用于诸如此类的简单文件传输。
如果要下载上面的屏幕快照中显示的文件,我们只需使用文件的完整路径发出相同的命令。

$ curl -u username:password ftp://example.com/readme.txt
image

使用代理
在连接主机之前,很容易直接使用cURL来使用代理。cURL将默认使用HTTP代理,除非您另外指定。使用-x switch定义代理。由于在此示例中未指定协议,因此cURL将假定它是HTTP代理。

$ curl -x 192.168.1.1:8080 http://example.com

此命令将使用端口8080上的192.168.1.1作为代理连接到example.com。
您也可以将其与其他协议一起使用。下面是一个使用HTTP代理将UR cURLL到FTP服务器并检索文件的示例。

$ curl -x 192.168.1.1:8080 ftp://example.com/readme.txt

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

分块下载多个文件
我们已经展示了如何停止和恢复文件传输,但是如果我们希望cURL仅下载文件的一部分怎么办?这样,我们可以下载多个块文件。
如果您需要保持下载上限或类似限制,则可以仅下载文件的某些部分。–range标志用于完成此操作。

image

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

$ curl --range 0-99999999 http://releases.ubuntu.com/18.04/ubuntu-18.04.3-desktop-amd64.iso ubuntu-part1

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

$ curl --range 0-99999999 http://releases.ubuntu.com/18.04/ubuntu-18.04.3-desktop-amd64.iso ubuntu-part1
$ curl --range 100000000-199999999 http://releases.ubuntu.com/18.04/ubuntu-18.04.3-desktop-amd64.iso ubuntu-part2

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

$ cat ubuntu-part? > ubuntu-18.04.3-desktop-amd64.iso

客户端证书

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

$ curl --cert path/to/cert.crt:password ftp://example.com

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

image

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

Silent cURL
如果您不想显示cURL的进度表和错误消息,则-s switch可提供该功能。它仍然会输出您请求的数据,因此,如果您希望命令100%保持静音,则需要将输出定向到一个文件中。将此命令与-O flag结合使用可将文件保存在当前的工作目录中。这将确保cURL返回0输出。

$ curl -s -O http://example.com

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

$ curl -s http://example.com --output index.html
image

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

$ curl -I example.com
image

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

$ curl -I -L example.com

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

$ curl -H 'Connection: keep-alive' -H 'Accept-Charset: utf-8 ' http://example.com

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

$ curl -d 'name=geek&location=usa' http://example.com

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

  $ curl -d @filename http://example.com

根据需要使用多个-d标志,以指定要尝试上载的所有不同数据或文件名。如果要将文件上传到FTP服务器,则可以使用-T选项。

$ curl -T myfile.txt ftp://example.com/some/directory/

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

$ curl smtp://mail.example.com --mail-from me@example.com --mail-rcpt john@domain.com –upload-file email.txt

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

$ cat email.txt

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

阅读电子邮件
cURL支持IMAP(和IMAPS)和POP3,两者均可用于从邮件服务器检索电子邮件。像这样使用IMAP登录:

$ curl -u username:password imap://mail.example.com

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

$ 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也做得很好。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容

  • 如果你想知道你的服务器正在做干什么,你就需要了解一些基本的命令,一旦你精通了这些命令,那你就是一个专业的 Linu...
    七寸知架构阅读 10,803评论 1 71
  • cURL 是一个软件包,由命令行工具和库组成,用于使用 URL 语法进行数据传输。cURL 支持各种协议,如: 〇...
    舌尖上的大胖阅读 2,237评论 0 0
  • Linux wget是一个下载文件的工具,它用在命令行下。对于Linux用户是必不可少的工具,尤其对于网络管理员,...
    土豆西瓜胡萝卜阅读 44,253评论 0 6
  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 4,362评论 0 5
  • Linux 命令-curl 常用命令 下载单个文件 cur http://www.demo.com 默认将输出打印...
    majun00阅读 4,872评论 0 5