curl 命令示例
在本教程中,我们将通过实际示例和最常见的 curl 选项的详细说明向您展示如何使用 curl 工具。
什么是 curl ?
curl 是命令行实用程序,用于将数据从服务器传输或者传输数据到服务器,他并没有用户交互界面,使用 curl ,您可以使用支持的协议之一下载或上传数据,包括 HTTP , HTTPS , SCP , SFTP 和 FTP 。 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
使用 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 文档 页面。