Linux中的Curl命令及实例
curl
是一个命令行工具,用于从服务器传输数据或向服务器传输数据,其设计无需用户互动。通过curl
,你可以使用支持的协议之一下载或上传数据,包括HTTP、HTTPS、SCP、SFTP、和FTP。curl
提供了许多选项,允许你恢复传输,限制带宽,代理支持,用户认证,以及更多。
在本教程中,我们将通过实际的例子和对最常见的curl选项的详细解释,向你展示如何使用curl工具。
安装Curl
今天,大多数Linux发行版上都预装了curl软件包。
要检查你的系统是否安装了Curl包,打开你的控制台,输入curl
,然后按回车。如果你安装了curl
,系统会打印出curl: try 'curl --help' or 'curl --manual' for more information
。否则,你会看到类似curl command not found
的内容。
如果curl
没有被安装,你可以使用你的发行版的软件包管理器轻松地安装它。
在Ubuntu和Debian上安装Curl
sudo apt update
sudo apt install curl
在CentOS和Fedora系统上安装Curl
sudo yum install curl
如何使用Curl
curl
命令的句法如下。
curl [options] [URL...]
在其最简单的形式中,当调用时没有任何选项,curl
将指定的资源显示在标准输出中。
例如,如果要检索example.com
主页,你可以运行。
curl example.com
该命令将在你的终端窗口中打印出example.com
主页的源代码。
如果没有指定协议,curl
会尝试猜测你想使用的协议,它将默认为HTTP
。
将输出结果保存到一个文件中
要想保存curl
命令的结果,请使用-o
或-O
选项。
小写的-o
以预定义的文件名来保存文件,在下面的例子中,这个文件名是vue-v2.6.10.js
。
curl -o vue-v2.6.10.js https://cdn.jsdelivr.net/npm/vue/dist/vue.js
大写的-O
以其原始文件名保存文件。
curl -O https://cdn.jsdelivr.net/npm/vue/dist/vue.js
下载多份文件
要想一次下载多个文件,请使用多个-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
恢复下载
你可以通过使用-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
获取一个URL的HTTP头信息
HTTP头信息是用冒号分隔的键值对,包含用户代理、内容类型和编码等信息。头信息在客户端和服务器之间与请求或响应一起传递。
使用-I
选项,只获取指定资源的HTTP头信息。
curl -I --http2 https://www.ubuntu.com/
测试一个网站是否支持HTTP/2协议
要检查一个特定的URL是否支持新的HTTP/2协议,要用-I
和--http2
选项来获取HTTP头信息。
curl -I --http2 -s https://linuxize.com/ | grep HTTP
-s
选项告诉curl
以静默(安静)的方式运行,并隐藏进度表和错误信息。
如果远程服务器支持HTTP/2,则curl
会打印出HTTP/2.0 200
。
输出
HTTP/2 200
否则,响应是HTTP/1.1 200
。
输出
HTTP/1.1 200 OK
如果你的curl版本是7.47.0
或更高版本,你不需要使用--http2
选项,因为HTTP/2在所有的HTTPS连接中都是默认启用的。
跟随重定向
默认情况下,curl
并不跟随HTTP位置头信息。
如果你试图检索google.com
的非www版本,你会注意到,你没有得到页面的源头,而是被重定向到www版本。
curl google.com
-L
选项指示curl
跟随任何重定向,直到它到达最终目的地。
curl -L google.com
改变用户代理(User-Agent)
有时在下载文件时,远程服务器可能被设置为阻止Curl用户代理,或根据访问者的设备和浏览器返回不同的内容。
在这样的情况下,要想模拟不同的浏览器,请使用-A
选项。
例如,要模拟Firefox 60,你可以使用。
curl -A "Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0" https://getfedora.org/
指定一个最大的传输速率
--limit-rate
选项允许你限制数据传输率。该值可以用字节表示,用k
后缀表示千字节,用m
后缀表示兆字节,用g
后缀表示千兆字节。
在下面的例子中,curl
将下载Go的二进制文件,并将下载速度限制在1 mb。
curl --limit-rate 1m -O https://dl.google.com/go/go1.10.3.linux-amd64.tar.gz
这个选项对于防止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/
发送 Cookie
有时,你可能需要用特定的cookie进行HTTP请求,以访问远程资源或调试一个问题。
默认情况下,当用curl
请求一个资源时,不会发送或存储任何cookies。
要向服务器发送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 username:password -x 192.168.44.1:8888 http://linux.com/
总结
curl
是一个命令行工具,允许你从远程主机传输数据或向远程主机传输数据。它在排除故障、下载文件等方面非常有用。
本教程中的例子很简单,但展示了最常用的curl
选项,目的是帮助你理解curl
命令的工作原理。
关于curl
的更多信息,请访问Curl文档页面。
如果你有任何问题或反馈意见,请随时留言。