Linux中的curl命令示例
“ curl”是一个命令行实用程序,用于从服务器传输数据或者向服务器传输数据,该服务器设计为无需用户交互即可工作。
使用'curl',我们可以使用受支持的协议之一下载或者上传数据,包括HTTP,HTTPS,SCP,SFTP和FTP。
“ curl”提供了许多选项,使我们可以继续传输,限制带宽,代理支持,用户身份验证等等。
在本教程中,我们将通过实际示例和最常见的卷曲选项的详细说明,向我们展示如何使用卷曲工具。
安装Curl
curl软件包已预安装在当今的大多数Linux发行版中。
要检查系统上是否安装了Curl软件包,请打开控制台,键入'curl',然后按Enter。
如果安装了“ curl”,系统将显示“ curl:尝试使用“ curl --help”或者“ curl --manual”以获取更多信息”。
否则,我们将看到类似“找不到卷曲命令”的内容。
如果未安装“ curl”,则可以使用发行版的程序包管理器轻松安装它。
在Ubuntu和Debian上安装Curl
sudo apt updatesudo apt install curl
在CentOS和Fedora上安装Curl
sudo yum install 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/2016.06.01/archlinux-2016.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://theitroad.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”选项,因为默认情况下,所有HTTPS连接都启用了HTTP/2.
跟随重定向
默认情况下,“ curl”不遵循HTTP Location标头。
如果我们尝试检索“ www.google.com”的非www版本,则会注意到,除了获取页面来源之外,我们还将被重定向到www版本:
curl google.com
“ -L”选项指示“ curl”遵循任何重定向,直到到达最终目的地:
curl -L google.com
更改用户代理
有时,在下载文件时,根据访问者设备和浏览器的不同,可能会将远程服务器设置为阻止Curl User-Agent或者返回不同的内容。
在这种情况下模拟不同的浏览器时,请使用“ -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
此选项对于防止“卷曲”消耗所有可用带宽很有用。
通过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发出HTTP请求,以访问远程资源或者调试问题。
默认情况下,当使用'curl'请求资源时,不发送或者存储任何cookie。
要将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/