curl命令使用指南:从安装到使用示例
curl命令使用指南:从安装到使用示例
curl是一个强大的开源命令行工具和库,用于通过URL进行数据传输。它支持多达28种协议,让你能够轻松发送请求和接收响应。本文将详细介绍curl的安装、基本使用方法以及一些高级用法。
大多数Linux发行版都预装了curl。即使你的系统没有自带,或者不小心删掉了也不要紧。本文将教你如何在Linux系统上安装和使用curl。
curl和libcurl:工具与库的区别
虽然curl和libcurl关系密切,但它们的用途是不同的:
- curl是一个命令行工具,让你能通过多种协议(如HTTP、HTTPS、FTP、SCP、SFTP等)与远程服务器传输数据。
- Libcurl则是一个客户端库,为应用程序提供网络操作的API。它用C语言编写,支持与curl相同的协议,让开发者能轻松为程序添加网络功能。
简单来说,curl是一个随手可用的命令行工具,而libcurl是开发者用来给应用添加网络功能的库。基本知识铺垫完毕,接下来,让我们看看怎么在Linux系统上安装和使用它们。
第1步:在Linux上安装curl和libcurl
如果你的Linux发行版为了精简系统没有预装curl,可以通过系统默认的包管理器进行安装:
1.1 Debian或Ubuntu系统
- 使用APT包管理器安装curl:
sudo apt install curl
- 安装libcurl(可以选择喜欢的TLS后端):
sudo apt install libcurl4-openssl-dev #或者 sudo apt install libcurl4-nss-dev #或者 sudo apt install libcurl4-gnutls-dev
1.2 Red Hat或Fedora系统
- 对于Fedora和CentOS等RHEL衍生版,使用YUM包管理器安装curl:
sudo dnf install curl
- 安装libcurl开发包(包含头文件和文档):
sudo dnf install libcurl-devel
1.3 SUSE或openSUSE系统
- 使用Zypper包管理器安装curl:
sudo zypper install curl
- 安装Libcurl开发包:
sudo zypper install libcurl-devel
1.4 Arch或Manjaro系统
Arch Linux核心库里面有curl,但没有官方libcurl包:
sudo pacman -Sy curl
第2步:验证curl安装
安装完成后,执行以下命令验证curl是否已经安装成功:
curl --version
这个命令会显示curl的版本信息,包括支持的协议和特性。如果你看到如下图的输出,就说明安装成功了:
第3步:在Linux上使用curl命令
3.1 常见用法
如前所述,curl命令能用28种不同的协议,通过URL进行数据传输(发送请求和接收响应)。现在,让我们通过一些实际的例子,来看看如何在日常工作中灵活运用curl命令。
向服务器发送GET请求并显示收到的响应,主要用于快速查看网站或API的响应:
curl https://www.example.com
只获取HTTP头信息,主要用于查看HTTP状态码和响应头信息,而不下载页面内容:
curl -I https://www.example.com
如果URL有多次重定向,可以用-L参数显示最终响应内容,如短链接或301、302重定向之后的页面:
curl -L https://www.example.com/v2/users
用JSON数据向API发送POST请求,主要用于向RESTful API提交数据,如创建新用户或更新信息:
curl -X POST -H "Content-Type: application/json" -d '{"name": "billy", "age": 18}' https://www.example.com/api
将文件下载到本地,-o参数用于指定本地目录,不写就表示下载到当前目录:
curl -o ~/Downloads/temp.zip -O https://www.example.com/downloads/temp.zip
在高级用法中,你还可以使用curl将大文件进行分割下载。
用多部分表单数据上传文件,主要用于向服务器上传文件,如提交附件或更新网站内容:
curl -F "file=@/home/sysgeek/Downloads/temp.zip" https://www.example.com/downloads/
在请求中加入自定义头信息,主要用于访问需要Token认证的API,如获取用户数据或执行受限操作:
curl -H "Authorization: Bearer token123" https://www.example.com/api
为安全API访问提供基本认证信息,主要用于需要用户名和密码登录的网站或服务:
curl -u username:password https://www.example.com/api
在请求头中设置自定义cookie,模拟已登录状态访问页面:
curl -b "sessionid=123456" https://www.example.com/
指定特定的HTTP方法,如GET、PUT和HEAD:
curl -X PUT https://www.example.com/resource
将网站内容保存为HTML文件,快速抓取网页内容进行离线分析或存档:
curl -o index.html https://www.example.com/
在请求头中设置自定义user-agent用户代理,模拟特定浏览器访问网站,绕过一些限制或进行兼容性测试:
curl -A "Mozilla/5.0 (X11; Linux i686; rv:109.0) Gecko/20100101 Firefox/115.0" https://www.example.com/
测试服务器的响应时间,检查网站性能,监控服务器响应速度:
$ curl -w "Response time: %{time_total}\n" -o /dev/null -s https://www.example.com/
3.2 实际用例
例如,要查看系统极客的网站链接是否有重定向,我们可以使用以下命令:
curl -A "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 Edg/130.0.0.0" -I -L http://www.sysgeek.cn/
- 由于网站屏蔽了curl,所以先通过-A参数来模拟一个user-agent来绕过屏蔽。
- 然后使用-I参数来读取响应头。
- 最后通过-L参数来查看重定向。
通过返回信息可以看出,http://www.sysgeek.cn被301重定向到了https://www.sysgeek.cn。
这些常用场景能帮你更好地理解curl命令在日常工作中的实际应用。根据具体需求,你可以灵活组合这些命令来完成各种网络任务。如果你想更深入地了解curl命令,可以使用man curl命令查看使用手册。