curl 是一个极其强大和流行的命令行工具,用于传输数据,它支持众多协议,包括 HTTP, HTTPS, FTP, FTPS, SCP, SFTP, LDAP, LDAPS, DICT, TELNET, FILE, and IMAP,它几乎是 Linux、macOS 和其他类 Unix 系统的标准工具,在 Windows 上也可以轻松获取。

下面我将详细介绍 curl 命令的各种常用用法和选项。
基本用法
1 发送一个简单的 GET 请求
这是最常见的用法,获取指定 URL 的内容。
curl https://www.example.com
这会直接将 https://www.example.com 的 HTML 内容打印到终端(标准输出)。
2 将输出保存到文件
使用 -o 或 --output 选项可以将响应内容保存到文件。

curl -o example.html https://www.example.com
# 或者使用 --output
curl --output example.html https://www.example.com
3 显示进度条
对于大文件下载,使用 或 --progress-bar 可以显示一个友好的进度条。
curl -# -o large_file.zip https://example.com/large_file.zip
4 只显示 HTTP 状态码
如果你只想知道请求是否成功(用于脚本检查),可以使用 -s(静默模式)和 -w(写入格式)选项组合。
# -s 让 curl 不显示进度条和错误信息,只显示 -w 指定的格式
# \r\n 是换行符
curl -s -w "%{http_code}\n" -o /dev/null https://www.example.com
# 输出将会是 200
-o /dev/null 表示将响应体丢弃,因为我们只关心状态码。
5 显示详细的请求/响应信息
使用 -v(verbose)或 --trace 可以看到 curl 发送的请求头和接收到的响应头,这对于调试非常有用。

curl -v https://www.example.com
你会看到类似这样的输出:
>开头的行是 curl 发送给服务器的请求头。<开头的行是服务器返回给 curl 的响应头。
HTTP/HTTPS 相关用法
1 发送 POST 请求
使用 -d 或 --data 选项可以发送 POST 请求。
# 发送简单的表单数据 curl -d "name=John&age=30" -X POST https://example.com/api/users # -X POST 可以省略,因为 -d 会自动将请求方法设为 POST curl -d "name=John&age=30" https://example.com/api/users
2 发送 JSON 数据
发送 JSON 数据时,通常需要设置 Content-Type 请求头。
curl -H "Content-Type: application/json" \
-d '{"name": "John", "age": 30}' \
https://example.com/api/users
3 添加自定义请求头
使用 -H 或 --header 选项可以添加自定义的 HTTP 头。
curl -H "X-Custom-Header: my-value" \
-H "Authorization: Bearer my_token" \
https://example.com/api/protected
4 处理 Cookies
-b 或 --cookie 用于发送 cookies,-c 或 --cookie-jar 用于保存服务器返回的 cookies。
# 从文件 cookies.txt 中读取 cookies 并发送 curl -b cookies.txt https://example.com/login # 将服务器返回的 cookies 保存到 cookies.txt 文件 curl -c cookies.txt https://example.com/login
5 发送文件
使用 -F 或 --form 选项可以模拟表单上传文件。
# 上传一个名为 profile.jpg 的图片 curl -F "file=@profile.jpg" https://example.com/upload
6 处理重定向
默认情况下,curl 会跟随 HTTP 的重定向(如 301, 302),使用 -L 或 --location 可以强制跟随,这对于处理需要多次跳转的 URL 很有用。
curl -L https://short.url/abc123
7 指定 User-Agent
使用 -A 或 --user-agent 可以模拟浏览器或其他客户端。
curl -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" \
https://www.example.com
FTP 相关用法
1 从服务器下载文件
curl -u username:password -O ftp://ftp.example.com/path/to/file.zip # -O 会用服务器上的文件名作为本地文件名
2 上传文件到服务器
curl -T local_file.txt -u username:password ftp://ftp.example.com/path/to/ # -T 指定要上传的本地文件
常用选项速查表
| 选项 | 长选项 | 描述 |
|---|---|---|
-d |
--data |
POST 发送数据 |
-H |
--header |
添加自定义请求头 |
-I |
--head |
只获取响应头,不获取响应体 (HEAD 请求) |
-i |
--include |
在输出中包含响应头 |
-L |
--location |
跟随服务器重定向 |
-o |
--output |
将输出保存到文件 |
-O |
--remote-name |
使用服务器上的文件名保存 |
-s |
--silent |
静默模式,不显示进度条或错误信息 |
-v |
--verbose |
详细模式,显示请求/响应头 |
-w |
--write-out |
使用指定格式输出信息(如状态码、时间等) |
--progress-bar |
显示进度条 | |
-X |
--request |
指定请求方法 (如 GET, POST, PUT) |
-u |
--user |
指定用户名和密码 (用于认证) |
-b |
--cookie |
从文件中读取 cookies 并发送 |
-c |
--cookie-jar |
将服务器返回的 cookies 保存到文件 |
-F |
--form |
模拟表单上传数据或文件 |
-k |
--insecure |
允许不安全的 SSL 证书连接(忽略证书验证) |
-A |
--user-agent |
设置 User-Agent 请求头 |
实战示例
示例1:检查一个 API 是否可用并返回状态码
# 简洁地获取状态码,不下载响应体
curl -s -o /dev/null -w "%{http_code}" https://api.github.com
# 输出可能是 200
示例2:从 GitHub 获取你的用户信息(需要认证)
# 将 YOUR_TOKEN 替换为你的 Personal Access Token curl -H "Authorization: token YOUR_TOKEN" https://api.github.com/user
示例3:向一个 API 端点发送 JSON 数据并保存响应
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_KEY" \
-d '{"title": "My New Post", "body": "This is the content."}' \
-o response.json \
https://api.example.com/v1/posts
curl 是一个功能极其丰富的工具,以上只是冰山一角,要查看所有选项和更详细的说明,可以随时使用 man curl 命令(在 Linux/macOS 上)或 curl --help。
掌握 curl 对于开发者、系统管理员和网络工程师来说是一项必备技能,它在调试 API、测试服务器、编写自动化脚本等方面都发挥着不可替代的作用。
