curl 命令示例

在本教程中,我们将通过实际示例和最常见的 curl 选项的详细说明向您展示如何使用 curl 工具。

什么是 curl ?

curl 是命令行实用程序,用于将数据从服务器传输或者传输数据到服务器,他并没有用户交互界面,使用 curl ,您可以使用支持的协议之一下载或上传数据,包括 HTTP , HTTPS , SCPSFTPFTP 。 curl 提供了许多选项,允许您断点续传,限制带宽,代理支持,用户身份验证等等。

安装 curl

curl 软件包已预先安装在大多数 Linux 发行版上。

要检查系统上是否安装了 curl 包,请打开控制台,键入 curl ,然后按 Enter 键。如果你安装了 curl ,系统会打印出来 curl: try 'curl --help' or 'curl --manual' for more information ,否则你会看到类似的东西 curl command not found

如果没有安装 curl ,您可以使用发行版的软件包管理器轻松安装它。

在 Ubuntu 和 Debian 上安装 curl

sudo apt install curl

在 CentOS 和 Fedora 上安装 curl

sudo yum install curl

curl 命令的语法

在讨论如何使用 curl 命令之前,让我们先回顾一下基本语法。

curl 实用程序表达式采用以下形式:

curl [options] [URL...]
  • options - 以一个或两个 - 开头的 curl 选项
  • URL - 远程服务器的 URL 。

如何使用 curl

在没有使用任何选项的情况下, curl 将以最简单的形式显示 [url] 中指定的资源到标准输出。

在以下示例中,我们将检索 example.com 主页:

curl example.com

上面的命令将 example.com 在终端窗口中打印主页的源代码。

如果你没有指定协议 curl 将尝试猜测你想要使用的协议,它将默认为 HTTP

如何将 curl 输出保存到文件

要保存 curl 命令的结果,可以使用 -o-O 标记。

小写 -o 使用预定义的文件名保存文件,例如下面的示例中的 vue-v2.5.16.js

curl -o vue-v2.5.16.js https://cdn.jsdelivr.net/npm/vue/dist/vue.js

大写 -O 将使用其原始文件名保存文件,例如下面的示例中的 vue.js

curl -O https://cdn.jsdelivr.net/npm/vue/dist/vue.js

如何使用 curl 下载多个文件

要一次下载多个文件,您可以使用多个 -O 标志,然后使用要下载的文件的 URL 。在以下示例中,我们将下载 Arch Linux 和 Debian iso 文件:

curl -O http://mirrors.edge.kernel.org/archlinux/iso/2018.06.01/archlinux-2018.06.01-x86_64.iso  \
-O https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/debian-9.4.0-amd64-netinst.iso

如何使用 curl 下载时断点续传

您可以使用该 -C - 选项继续下载。如果您的连接在下载大文件时丢失,不需要从头开始下载,可以继续前面的下载。

例如,如果使用以下命令下载 Ubuntu 18.04 iso 文件:

curl -O http://releases.ubuntu.com/18.04/ubuntu-18.04-live-server-amd64.iso

突然你的连接丢失你可以恢复下载:

curl -C - -O http://releases.ubuntu.com/18.04/ubuntu-18.04-live-server-amd64.iso

使用 curl 获取 URL 的 HTTP 头

要仅获取指定资源的 HTTP 标头,请使用以下 -I 标志:

curl -I --http2 https://www.ubuntu.com/

如何测试网站是否支持带 curl 的 HTTP/2

要检查特定 URL 是否支持新的 HTTP/2 协议,请使用 -I 选项获取 HTTP 标头时带上 --http2 标志:

curl -I --http2 -s https://buzheng.org/ | grep HTTP
HTTP/2 200
curl -I --http2 -s https://www.ubuntu.com/ | grep HTTP
HTTP/1.1 200 OK

从上面的输出可以看出,如果站点支持 HTTP/2 , curl 将打印 HTTP/2.0 200, 否则将打印 HTTP/1.1 200

如果您有 curl 版本 7.47.0 或更新版本,则不需要使用该 --http2 标志,因为默认情况下为所有 HTTPS 连接启用 HTTP/2 。

在上面的命令中,我们还使用了 -s 标志,告诉 curl 静默运行并隐藏进度表和错误消息。

如何使用 cURL 跟踪重定向

如果您不带 www 尝试检索 google.com 主页,则发现以下情况:

curl google.com

正如您从上面的输出中看到的 google.com 重定向到带 www 的版本,并且因为默认情况下 curl 不遵循 HTTP Location 标头,因此您无法获得 Google 主页的来源。

在这些情况下,您可以使用 -L 指示 curl 跟踪任何重定向的标志,直到它到达最终目标:

curl -L google.com

curl 中更改 User-Agent

有时,在下载文件时,远程服务器可能设置为阻止 curl 的 User-Agent ,或者您要下载的页面根据访问者设备和浏览器提供完全不同的内容。

在这样的情况下,传递 -A 标志模拟不同的浏览器:

curl -A "Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0" https://getfedora.org/

上面的命令将模拟 Firefox 60 请求 getfedora.org 页面。

如何指定最大传输速率

要限制数据传输速率,请使用 --limit-rate 标志。可以以字节来表达的值,也可以用 k 后缀表示千字节,用 m 后缀表示兆字节,用 g 后缀表示千兆字节。

以下命令将下载 Go 二进制文件并将下载速度限制为 1mb :

curl --limit-rate 1m -O https://dl.google.com/go/go1.10.3.linux-amd64.tar.gz

当您不希望 curl 占用所有可用带宽时,此选项很有用。

curl 如何通过 FTP 传输文件

要使用 curl 命令访问受保护的 FTP 服务器,您需要传递该 -u 标志并指定用户名和密码,如下所示:

curl -u FTP_USERNAME:FTP_PASSWORD ftp://ftp.example.com/

上面的命令将列出用户主目录中的所有文件和目录。

您可以从 FTP 服务器下载文件:

curl -u FTP_USERNAME:FTP_PASSWORD ftp://ftp.example.com/file.tar.gz

要将文件上载到 FTP 服务器,请使用 -T 后跟要上载的文件的名称:

curl -T newfile.tar.gz -u FTP_USERNAME:FTP_PASSWORD ftp://ftp.example.com/

使用 curl 发出请求时,默认情况下不会发送或存储任何 cookie 。有时,您可能需要使用特定 cookie 发出 HTTP 请求以访问远程资源或调试问题。

要将 cookie 发送到服务器,请使用 -b 开关,后跟 cookie 字符串或者包含 cookie 的文件名。

在以下示例中,我们将下载 Oracle Java JDK 文件 jdk-10.0.2_linux-x64_bin.rpm ,需要传递 cookie,名称是 oraclelicense 值是 a

curl -L -b "oraclelicense=a" -O http://download.oracle.com/otn-pub/java/jdk/10.0.2+13/19aef61b38124481863b1413dce1855f/jdk-10.0.2_linux-x64_bin.rpm

使用代理

curl 支持不同类型的代理,包括 HTTP , HTTPS 和 SOCKS 。

要通过代理服务器传输数据,请使用 -x (--proxy) 选项,后跟代理 URL 。

要使用 192.168.44.1 端口 8888 上的代理下载 linux.com 网页,您可以使用以下内容:

curl -x 192.168.44.1:8888 http://linux.com/

如果代理服务器需要身份验证,请使用 -U (--proxy-user) 选项,后跟用冒号分隔的用户名和密码 (user:password) :

curl -U mark:Passvv0rd -x 192.168.44.1:8888 http://linux.com/

结论

本教程中显示的示例很简单,但演示了最常用的 curl 选项,旨在帮助您了解 curl 命令的工作原理。

如果您想了解有关 curl 的更多信息,请访问 curl 文档 页面。