curl
是用于在本地计算机与远程服务器之间传输数据的命令行工具。使用curl时您可以使用HTTP,HTTPS, SCP , SFTP和FTP等协议下载或上传数据。
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
选项允许您限制数据传输速度/速率。默认的速度的单位是字节。你可以使用k
,m
,g
作为后缀,表示以不同的单位作为下载速度。
以下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/ #上传文件
发送Cookie
使用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文档页。