每天掌握一个Linux命令 - curl
Linux 命令工具 curl 使用指南
目录
- Linux 命令工具 curl 使用指南
- 一、工具概述
- 二、安装方式
- 1. 主流 Linux 发行版安装
- 2. 源码编译安装(适用于定制需求)
- 三、核心功能
- 四、基础用法
- 1. 发起 GET 请求
- 2. 发起 POST 请求
- 3. 下载文件
- 4. 设置请求头
- 5. 处理认证
- 五、进阶操作
- 1. 使用代理
- 2. 管理 Cookie
- 3. 断点续传与限速
- 4. 调试与日志输出
- 5. 上传文件
- 六、实战案例
- 案例 1:接口调试(检测 API 连通性)
- 案例 2:批量下载图片
- 案例 3:监控服务器状态
- 七、注意事项
一、工具概述
curl 是一个强大的命令行工具,用于在网络中传输数据,支持多种协议(如 HTTP/HTTPS、FTP、SMTP 等)。其设计目标是简单高效地与服务器进行通信,可用于发起请求、下载文件、调试接口、自动化脚本等场景。curl 支持丰富的参数配置,能灵活处理请求头、认证、代理、Cookie 等复杂场景,是 Linux 系统中网络调试的必备工具之一。
二、安装方式
1. 主流 Linux 发行版安装
- Ubuntu/Debian
sudo apt update sudo apt install curl
- CentOS/RHEL/Fedora
sudo yum install curl # CentOS/RHEL(需启用 EPEL 源) sudo dnf install curl # Fedora
- Arch Linux
sudo pacman -S curl
2. 源码编译安装(适用于定制需求)
wget https://curl.se/download/curl-7.88.1.tar.gz # 下载最新版本
tar -zxvf curl-7.88.1.tar.gz
cd curl-7.88.1
./configure --prefix=/usr/local/curl # 指定安装路径
make && sudo make install
三、核心功能
功能分类 | 典型场景 |
---|---|
协议支持 | 支持 HTTP/HTTPS、FTP、SFTP、SMTP、TELNET 等 20 余种协议 |
请求方法 | 支持 GET、POST、PUT、DELETE 等 HTTP 方法,可自定义请求体和头部 |
认证与安全 | 支持 Basic/Digest 认证、SSL/TLS 证书校验、HTTPS 代理及客户端证书验证 |
数据处理 | 支持上传/下载文件、表单提交、JSON/XML 数据传输,可设置 Cookie 和 User-Agent |
调试与监控 | 输出详细的请求日志(如响应头、状态码、耗时),支持限速和断点续传 |
自动化与脚本 | 支持通过 -o 、-w 等参数格式化输出,便于脚本解析和结果存储 |
四、基础用法
1. 发起 GET 请求
curl https://example.com # 访问网页,默认输出响应体
curl -I https://example.com # 仅获取响应头(-I 等效于 -head)
2. 发起 POST 请求
# 表单提交(Content-Type: application/x-www-form-urlencoded)
curl -X POST "https://api.example.com/login" -d "username=admin&password=123"# JSON 数据提交(需指定 Content-Type)
curl -X POST "https://api.example.com/data" \-H "Content-Type: application/json" \-d '{"name": "curl", "version": "7.88.1"}'
3. 下载文件
curl -O https://example.com/file.zip # -O 保留远程文件名
curl -o local_name.txt https://example.com/data.txt # -o 指定本地文件名
4. 设置请求头
curl -H "User-Agent: MyApp/1.0" https://example.com # 自定义 User-Agent
curl -H "Accept: application/json" https://api.example.com # 指定响应格式
5. 处理认证
curl -u user:pass https://api.example.com/auth # Basic 认证(-u 等效于 --user)
curl --ntlm -u domain\user:pass https://api.example.com # NTLM 认证
五、进阶操作
1. 使用代理
curl --proxy http://proxy.example.com:8080 https://example.com # HTTP 代理
curl --proxy socks5://socks.example.com:1080 https://example.com # SOCKS5 代理
2. 管理 Cookie
# 保存响应中的 Cookie 到文件
curl -c cookies.txt https://example.com/login# 携带 Cookie 发起请求
curl -b cookies.txt https://example.com/profile
3. 断点续传与限速
curl -C - -O https://example.com/large_file.iso # -C - 表示从上次中断处续传
curl --limit-rate 100k https://example.com/video.mp4 # 限制下载速度为 100KB/s
4. 调试与日志输出
curl -v https://example.com # verbose 模式,输出完整请求/响应信息
curl -w "Status: %{http_code}, Time: %{time_total}s" https://example.com # 自定义输出格式
5. 上传文件
# 单文件上传(Content-Type: multipart/form-data)
curl -X POST "https://api.example.com/upload" -F "file=@/path/to/image.jpg"# 多文件上传
curl -X POST "https://api.example.com/upload" \-F "file1=@/path/to/file1.txt" \-F "file2=@/path/to/file2.csv"
六、实战案例
案例 1:接口调试(检测 API 连通性)
curl -X GET "https://api.github.com/users/octocat" \-H "Accept: application/vnd.github.v3+json"
预期输出:返回用户信息的 JSON 数据,包含 id
、name
、public_repos
等字段。
案例 2:批量下载图片
for i in {1..10}; docurl -o "image_$i.jpg" "https://example.com/images/image_$i.jpg"
done
说明:通过循环批量下载指定 URL 后缀的图片文件。
案例 3:监控服务器状态
curl -o /dev/null -s -w "%{http_code} %{time_total}\n" https://example.com
输出示例:
200 0.345
说明:静默请求(-s
)并输出状态码和总耗时,适用于脚本监控。
七、注意事项
-
HTTPS 证书验证
- 默认情况下,curl 会校验服务器证书的有效性。若需忽略证书错误(如自签名证书),可使用
-k
或--insecure
,但不建议在生产环境中使用:curl -k https://self-signed.example.com
- 默认情况下,curl 会校验服务器证书的有效性。若需忽略证书错误(如自签名证书),可使用
-
特殊字符转义
- 在 JSON 数据或 URL 中包含特殊字符(如
&
、"
)时,需使用反斜杠\
转义,或用单引号包裹参数:curl -d '{"message": "Hello & World"}' https://api.example.com
- 在 JSON 数据或 URL 中包含特殊字符(如
-
大文件传输风险
- 直接下载大文件时建议使用
-L
(跟随重定向)和-C
(断点续传)参数组合,避免网络中断导致重复下载:curl -L -C - -O https://example.com/big_file.tar.gz
- 直接下载大文件时建议使用
-
安全认证规范
- 认证信息(如密码)避免直接写入脚本明文,可通过环境变量传递:
curl -u "$USER:$PASSWORD" https://api.example.com # 从环境变量读取凭证
- 认证信息(如密码)避免直接写入脚本明文,可通过环境变量传递:
-
代理与防火墙限制
- 若企业网络限制出站协议,需确认代理是否支持目标协议(如 HTTPS),或联系网络管理员配置白名单。
通过以上内容,可快速掌握 curl 的核心功能与典型用法。实际场景中可结合 man curl
查看完整手册,或通过 curl --help
快速查询参数说明。