curl 是一款强大的开源命令行工具和库,用于通过 URL 进行数据传输。它支持多达 28 种协议,让你能够轻松发送请求和接收响应。
大多数 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 系统
1使用 APT 包管理器安装 curl:
sudo apt install curl
2安装 libcurl(可以选择喜欢的 TLS 后端):
sudo apt install libcurl4-openssl-dev
#或者
sudo apt install libcurl4-nss-dev
#或者
sudo apt install libcurl4-gnutls-dev
2.2 Red Hat 或 Fedora 系统
1对于 Fedora 和 CentOS 等 RHEL 衍生版,使用 YUM 包管理器安装 curl:
sudo dnf install curl
2安装 libcurl 开发包(包含头文件和文档):
sudo dnf install libcurl-devel
2.3 SUSE 或 openSUSE 系统
1使用 Zypper 包管理器安装 curl:
sudo zypper install curl
2安装 Libcurl 开发包:
sudo zypper install libcurl-devel
2.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 命令。
1向服务器发送GET
请求并显示收到的响应,主要用于快速查看网站或 API 的响应:
curl https://www.example.com
2只获取 HTTP 头信息,主要用于查看 HTTP 状态码和响应头信息,而不下载页面内容:
curl -I https://www.example.com
3如果 URL 有多次重定向,可以用-L
参数显示最终响应内容,如短链接或301
、302
重定向之后的页面:
curl -L https://www.example.com/v2/users
4用 JSON 数据向 API 发送 POST 请求,主要用于向 RESTful API 提交数据,如创建新用户或更新信息:
curl -X POST -H "Content-Type: application/json" -d '{"name": "billy", "age": 18}' https://www.example.com/api
5将文件下载到本地,-o
参数用于指定本地目录,不写就表示下载到当前目录:
curl -o ~/Downloads/temp.zip -O https://www.example.com/downloads/temp.zip
在高级用法中,你还可以使用 curl 将大文件进行分割下载。
6用多部分表单数据上传文件,主要用于向服务器上传文件,如提交附件或更新网站内容:
curl -F "file=@/home/sysgeek/Downloads/temp.zip" https://www.example.com/downloads/
7在请求中加入自定义头信息,主要用于访问需要 Token 认证的 API,如获取用户数据或执行受限操作:
curl -H "Authorization: Bearer token123" https://www.example.com/api
8为安全 API 访问提供基本认证信息,主要用于需要用户名和密码登录的网站或服务:
curl -u username:password https://www.example.com/api
9在请求头中设置自定义 cookie,模拟已登录状态访问页面:
curl -b "sessionid=123456" https://www.example.com/
10指定特定的 HTTP 方法,如GET
、PUT
和HEAD
:
curl -X PUT https://www.example.com/resource
11将网站内容保存为 HTML 文件,快速抓取网页内容进行离线分析或存档:
curl -o index.html https://www.example.com/
12在请求头中设置自定义user-agent
用户代理,模拟特定浏览器访问网站,绕过一些限制或进行兼容性测试:
curl -A "Mozilla/5.0 (X11; Linux i686; rv:109.0) Gecko/20100101 Firefox/115.0" https://www.example.com/
13测试服务器的响应时间,检查网站性能,监控服务器响应速度:
$ 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
命令查看使用手册。
最新评论
可以共存,但虚拟机维护起来更麻烦了呀。
关掉之后重启下系统再试试呢
不能共存吗?
我是家庭版,看着关掉了,但是破解程序一运行还是弹窗,搞不了