Linux中的Curl命令及实例

评论 0 浏览 0 2018-07-17

curl是一个命令行工具,用于从服务器传输数据或向服务器传输数据,其设计无需用户互动。通过curl,你可以使用支持的协议之一下载或上传数据,包括HTTP、HTTPS、SCPSFTP、和FTPcurl提供了许多选项,允许你恢复传输,限制带宽,代理支持,用户认证,以及更多。

在本教程中,我们将通过实际的例子和对最常见的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 updatesudo 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/
curl get http headers

测试一个网站是否支持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
curl follow redirects

-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文档页面。

如果你有任何问题或反馈意见,请随时留言。

最后更新2023-09-24
0 个评论
标签