文章目录
在本教程中,我们将通过实际示例和最常见的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 [options] [URL...]
-
options
-以一个或两个破折号开头的Curl选项。 -
URL
-远程服务器的网址。
在不使用任何选项的情况下,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
将使用其原始文件名保存文件:
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 header
HTTP标头是冒号分隔的键/值对,其中包含诸如用户代理,内容类型和编码之类的信息。标头通过请求或响应在客户端和服务器之间传递。
-I
选项允许您仅获取指定资源的HTTP标头:
curl -I --http2 https://www.ubuntu.com/
如何测试网站是否支持带有curl的HTTP / 2
要检查特定的URL是否支持新的 HTTP / 2协议,请使用-I
和--http2
选项来获取HTTP标头:
curl -I --http2 -s https://myfreax.com/ | grep HTTP
-s
选项,指示curl以静默方式运行(安静)并隐藏进度表和错误消息。
如果远程服务器支持HTTP / 2,则curl将打印HTTP/2.0 200
:
HTTP/2 200
否则,响应将为HTTP/1.1 200
L
HTTP/1.1 200 OK
如果您使用的是curl版本7.47.0
或更高版本,则不需要使用--http2
选项,因为默认情况下,所有HTTPS连接都启用了HTTP / 2。
如何使用cURL进行重定向
如果您尝试在没有www
的情况下检索google.com主页,则会注意到以下内容:
curl google.com
从上面的输出google.com
中可以看到,重定向到www版本,并且由于默认情况下curl不遵循HTTP Location标头,因此您不会获得Google主页的来源。
-L
选项,指示curl遵循任何重定向,直到到达最终目的地:
curl -L google.com
如何更改Curl用户代理
有时,下载文件时,可以将远程服务器设置为阻止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
后缀表示为千兆字节。
在以下示例中,curl将下载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或字符串的文件名。
例如,要下载Oracle Java JDK rpm文件 jdk-10.0.2_linux-x64_bin.rpm
,您需要传递一个名为oraclelicense
的cookie,其值为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
上的代理下载指定的网页:
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文档页。