Linux Curl命令示例

Curl是一种命令行实用程序,用于从服务器传输数据或向服务器传输数据,该服务器设计为无需用户交互即可工作。使用curl时,您可以使用受支持的协议之一下载或上传数据,包括HTTP,HTTPS, SCP , SFTP 和 FTP 。在本教程中,我们将通过实际示例和最常见的curl选项的详细说明向您展示如何使用curl工具。

9 min read
By myfreax
Linux Curl命令示例

curl是用于在本地计算机与远程服务器之间传输数据的命令行工具。使用curl时您可以使用HTTP,HTTPS, SCP SFTPFTP等协议下载或上传数据。

Curl提供了许多选项,使您可以恢复上传/下载,限制带宽,代理支持,用户身份验证等。

curl命令已预装在大多数Linux发行版中。要检查系统上是否安装了curl,请打开控制台,键入curl,然后按Enter。

如果已安装curl,则系统将打印curl: try 'curl --help' or 'curl --manual' for more information

否则您将看到类似于curl命令未找到curl command not found的信息。如果你尚未安装curl,则可以使用发行版的软件包管理器apt命令或者yum命令安装curl

如果你使用的是基于Debian的Linux发行版,例如Ubuntu,Linux Mint等。你可以运行sudo apt install curl命令安装curl。

如果你使用的是基于Redhat的Linux发行版,例如CentOS,Fedora等。你可以运行sudo yum install curl命令安装curl。

Curl命令与选项

curl命令的语法格式是curl [options] [URL...],其中options指定curl的选项URL表示远程服务器的地址。

在不使用任何选项的情况下,curl将下载指定的URL资源并重定向到标准输出中。命令curl myfreax.com,将会下载我们站点的首页myfreax.com,并重定向到标准输出。

该命令将在您的终端中打印myfreax.com主页的源码。如果您未指定使用的协议,curl将默认使用HTTP协议。

下载文件

默认情况下curl将下载url的资源并重定向标准输出。如果要保存下载的文件,可以使用-o-O选项。

使用小写-o选项你可以指定保存文件的名称。你还可以指定绝对路径,curl将会把文件到你指定的绝对路径中。

大写-O选项将使用其原始文件名保存到文件,并将保存到当前目录下,即运行curl命令所在目录的位置。

以下curl命令将会下载vue.js文件到你当前的目录中,并使用vue-v2.5.16.js名称保存文件到当前目录下。

当下载完成后,你可以使用ls列出curl下载的vue.js文件。ls vue*表示列出名称包含vue字符串的文件。

curl -o /home/myfreax/work/vue.js https://cdn.jsdelivr.net/npm/vue/dist/vue.js

curl -O https://cdn.jsdelivr.net/npm/vue/dist/vue.js
ls vue* #查看刚下载文件

下载多个文件

要一次下载多个文件,请使用多个-O选项或者小写的-o选项,后跟要下载文件的URL。

和使用curl下载单个文件一样。当使用小写的-o选项时你需要指定的下载目录路径。使用大写-O选项会保存当前目录下。你还可以混合使用小写的-o选项和大写-O选项。

以下curl命令在使用-O选项时将会下载vue.js文件到你当前的目录中,并使用vue.js名称保存文件

小写-o选项将会下载vue.js文件myfreax用户的家目录下的wrok目录,并将文件保存为vue.js。

当下载完成后,你可以使用ls列出curl下载的文件&&表示顺序运行命令。

curl -o /home/myfreax/work/vue.js https://cdn.jsdelivr.net/npm/vue/dist/vue.js \
-O https://cdn.jsdelivr.net/npm/vue/dist/vue.js

ls /home/myfreax/work/vue.js && ls vue.js #查看刚下载文件

断点续传/恢复下载

如果您在下载大文件期间断开连接。你无需从头开始下载,可以使用-C -选项继续上一次的下载。

你可以在第一次下载大文件时直接指定-C -选项,当下载大文件断开连接时,直接使用之前的命令即可恢复下载。

例如,如果要使用curl命令下载Ubuntu 22.04 iso文件突然之间您的连接断开了,您可以通过以下方式恢复下载:

curl -C - -O https://releases.ubuntu.com/22.04/ubuntu-22.04-desktop-amd64.iso

打印HTTP响应头

HTTP响应头是使用冒号分隔的键/值对,其中包含服务器类型,通常是Nginx/Apache,内容类型和HTTP状态码等信息。

curl的-I选项允许您仅获取指定URL资源的HTTP响应头,也包括你在Nginx或者Apache设置的自定义响应头。

以下curl命令将会获取url是https://www.ubuntu.com/的响应头,在支持HTTP2服务器上使用HTTP2协议。

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

测试HTTP/2的支持

要检查指定的URL是否支持HTTP/2协议,请使用-I--http2选项来获取HTTP响应头,然后使用grep过滤输出。

如果您使用的curl版本7.47.0或更高版本,则不需要使用--http2选项,因为默认情况下,所有HTTPS连接都启用了HTTP/2。

-s选项,指示curl以静默方式运行并隐藏进度和错误消息。如果远程服务器支持HTTP/2协议,则将打印HTTP/2.0 200,否则响应将为HTTP/1.1 200

curl -I --http2 -s https://myfreax.com/ | grep HTTP

#HTTP/2 200 支持http2
#HTTP/1.1 200 OK 不支持http2

301重定向

如果使用命令curl google.com尝试在没有www的情况下检索google.com主页,你会注意到以下301页面的内容。

从301重定向的页面内容中可以看到,google.com被重定向到www版本。并且由于默认情况下curl不遵循HTTP Location header,因此您不会获得Google主页的源码。

curl的-L/--location选项,指示curl跟随301重定向,直到服务器不返回状态码301才会终止。

curl -L google.com

使用用户代理User-Agent

你应该遇到在使用不同浏览器时,有个浏览器可以下载,或者某个浏览器不能下载的情况。或者根据访问者的设备和浏览器,提供的不同页面内容。

这是因为根据User-Agent用户代理进行区分用户的设备类型,从而确定返回不同的内容或者阻止你的下载与访问。

为了避免服务器根据访问者的User-Agent用户代理提供不同内容。您可以使用curl命令的-A选项模拟其他浏览器的User-Agent用户代理。

以下curl命令将模拟Firefox 60请求https://getfedora.org/页面。

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

限制传输速度

--limit-rate选项允许您限制数据传输速度/速率。默认的速度的单位是字节。你可以使用kmg作为后缀,表示以不同的单位作为下载速度。

以下curl命令将下载Go二进制文件并将下载速度限制为1MB,-O选项表示保存到文件到当前目录中。

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

下载/上传FTP文件

curl除了支持HTTP协议之外,还支持FTP协议文件下载和上传,以及列出FTP服务器的文件。

如果你需要要使用curl命令访问受保护的FTP服务器,请使用-u选项并指定用户名和密码。

使用Curl列出文件时请指定目录的位置,curl将会列出目录的文件。如果指定的位置是文件curl将会下载该文件到当前目录中。

curl的-T选项允许你文件上传到FTP服务器,-T选项之后是您要上传的文件,也指定文件的绝对路径。

以下curl命令将列出用户的FTP目录中的所有文件。

curl -u FTP_USERNAME:FTP_PASSWORD ftp://ftp.example.com/ #列出文件

curl -u FTP_USERNAME:FTP_PASSWORD ftp://ftp.example.com/file.tar.gz #下载文件

curl -T newfile.tar.gz -u FTP_USERNAME:FTP_PASSWORD ftp://ftp.example.com/ #上传文件

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

curl的-b选项允许你将Cookie发送到服务器,-b选项后跟Cookie字符串或者包含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。

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

以下curl命令将使用192.168.44.1:8888代理服务器,访问http://linux.com/页面。

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

结论

本教程中显示的示例很简单,但演示了最常用的curl选项,旨在帮助您了解curl命令的工作方式。要了解有关curl的更多信息,请访问curl文档页。