在本教程中,我们将通过实际示例和最常见的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。有时您可能需要使用特定的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文档页。

如果你喜欢我们的内容可以选择在下方二维码中捐赠我们,或者点击广告予以支持,感谢你的支持