1. Curl 简介
CURL(Client URL)是一个强大的命令行工具,用于通过各种协议(HTTP、HTTPS、FTP等)传输数据。
2. 基本语法
curl [选项] [URL]
3. 常用命令示例
3.1 基本 HTTP 请求
# GET 请求(默认)
curl https://api.example.com/data
# POST 请求
curl-X POST https://api.example.com/data
# PUT 请求
curl-X PUT https://api.example.com/data
# DELETE 请求
curl-X DELETE https://api.example.com/data
3.2 发送数据
发送表单数据
# 表单编码
curl-d"name=John&age=30" https://api.example.com/user
# 多部分表单数据
curl-F"name=John"-F"photo=@photo.jpg" https://api.example.com/upload
# JSON 数据
curl-H"Content-Type: application/json" \
-d'{"name":"John","age":30}' \
https://api.example.com/user
3.3 设置请求头
curl-H"Authorization: Bearer token123" \
-H"Content-Type: application/json" \
https://api.example.com/data
3.4 文件操作
下载文件
# 下载到当前目录(保持原文件名)
curl-O https://example.com/file.zip
# 下载并指定文件名
curl-o custom_name.zip https://example.com/file.zip
# 恢复中断的下载
curl-C--O https://example.com/largefile.iso
上传文件
# FTP 上传
curl-T localfile.txt ftp://ftp.example.com/
# HTTP PUT 上传
curl-T localfile.txt https://example.com/upload
3.5 认证
# 基本认证
curl-u username:password https://api.example.com
# 仅提供用户名(会提示输入密码)
curl-u username https://api.example.com
# Bearer Token
curl-H"Authorization: Bearer YOUR_TOKEN" https://api.example.com
3.6 代理设置
# HTTP 代理
curl-x http://proxy.example.com:8080 https://example.com
# 带认证的代理
curl-U username:password -x http://proxy.example.com:8080 https://example.com
3.7 Cookie 管理
# 发送 Cookie
curl-b"name=value; name2=value2" https://example.com
# 从文件读取 Cookie
curl-b cookies.txt https://example.com
# 保存响应中的 Cookie 到文件
curl-c cookies.txt https://example.com
3.8 重定向和跟踪
# 跟随重定向
curl-L https://example.com
# 限制重定向次数
curl-L--max-redirs5 https://example.com
# 显示重定向过程
curl-L-v https://example.com
3.9 输出控制
详细输出
# 显示详细过程
curl-v https://example.com
# 更详细的输出
curl--trace-ascii debug.txt https://example.com
静默模式
# 不显示进度和错误信息
curl-s https://example.com
# 静默但显示错误
curl-sS https://example.com
# 不输出任何内容(只保存到文件)
curl-s-o output.txt https://example.com
3.10 SSL/TLS 相关
# 跳过 SSL 证书验证(不安全)
curl-k https://example.com
# 指定客户端证书
curl--cert client.pem --key key.pem https://example.com
# 指定 CA 证书
curl--cacert ca-bundle.crt https://example.com
3.11 限速和超时
# 限制下载速度
curl--limit-rate 100k -O https://example.com/largefile.zip
# 设置连接超时(秒)
curl--connect-timeout10 https://example.com
# 设置最大请求时间
curl--max-time30 https://example.com
3.12 其他实用功能
压缩支持
# 请求压缩内容
curl--compressed https://example.com
保存响应头
# 保存响应头到文件
curl-D headers.txt https://example.com
# 包含响应头到输出
curl-i https://example.com
只获取响应头
curl-I https://example.com
断点续传
# 从指定位置开始下载
curl-r1000-2000-o file.zip https://example.com/largefile.zip
4. 实际应用示例
4.1 API 测试
# 测试 REST API
curl-X GET "https://api.example.com/users?page=1&limit=10"
curl-X POST -H"Content-Type: application/json" \
-d'{"email":"test@example.com","password":"secret"}' \
https://api.example.com/login
4.2 监控网站状态
# 检查网站是否在线
curl-s-o /dev/null -w"%{http_code}\n" https://example.com
# 完整的监控脚本
curl-s-o /dev/null -w"
时间: %{time_total}秒
状态码: %{http_code}
DNS解析: %{time_namelookup}秒
连接时间: %{time_connect}秒
开始传输: %{time_starttransfer}秒
" https://example.com
4.3 批量下载
# 下载多个文件
curl-O https://example.com/file1.zip \
-O https://example.com/file2.zip \
-O https://example.com/file3.zip
# 使用 URL 列表文件
curl-K urls.txt
5. 高级技巧
5.1 管道操作
# 下载并解压
curl https://example.com/file.tar.gz | tar -xz
# 处理 JSON 响应
curl-s https://api.example.com/data | jq '.results[].name'
5.2 使用配置文件
# 创建配置文件 ~/.curlrc
user-agent ="MyCurlClient/1.0"
max-time =30
# 使用配置
curl-K ~/.curlrc https://example.com
5.3 调试和故障排除
# 显示所有连接信息
curl--trace-time--trace-ascii /dev/stdout https://example.com
# 查看 SSL 证书信息
curl-vI https://example.com 2>&1 | awk'/^* SSL/,/^* HTTP/'
6. 常用选项速查表
选项说明
-X 指定 HTTP 方法
-H 添加请求头
-d 发送 POST 数据
-F 发送表单数据
-u 认证信息
-o 输出到文件
-O 保存为远程文件名
-L 跟随重定向
-v 详细输出
-s 静默模式
-k 忽略 SSL 错误
-I 只获取响应头
-b 发送 Cookie
-c 保存 Cookie
-x 使用代理
-C 断点续传