作为全栈开发者,你日常运维多台宝塔服务器,curl 是排查接口、测试 WebHook、下载资源的必备利器。以下是按场景梳理的 curl 用法速查表,可直接复制到终端执行。
一、基础请求场景
| 场景 | 命令 | 说明 |
|---|---|---|
| GET 请求 | curl https://api.example.com/users |
默认输出到 stdout |
| 保存响应 | curl -o file.json https://api.example.com/data |
-o 指定文件名 |
| 跟随跳转 | curl -L https://bit.ly/xxx |
-L 跟随 3xx 重定向 |
| 显示响应头 | curl -I https://example.com |
-I 仅取 header(HEAD 请求) |
| 显示请求全过程 | curl -v https://example.com |
-v verbose 模式,调试 SSL/跳转必备 |
二、POST / 提交数据
# 1. 表单提交(Content-Type: application/x-www-form-urlencoded)
curl -X POST -d "name=john&age=30" https://api.example.com/form
# 2. JSON 提交(API 最常见)
curl -X POST \
-H "Content-Type: application/json" \
-d '{"user":"admin","pass":"123456"}' \
https://api.example.com/login
# 3. 从文件读取 JSON 体
curl -X POST -H "Content-Type: application/json" \
-d @payload.json \
https://api.example.com/webhook
# 4. 上传文件(multipart/form-data)
curl -F "file=@/path/to/local.zip" \
-F "description=备份文件" \
https://api.example.com/upload
三、请求头与认证
# 自定义 Header(Token 认证场景)
curl -H "Authorization: Bearer eyJhbG..." \
-H "X-Request-Id: $(date +%s)" \
https://api.example.com/protected
# Basic 认证(用户名:密码)
curl -u admin:password https://api.example.com/admin
# 或显式写法
curl -H "Authorization: Basic $(echo -n 'admin:pass' | base64)" ...
# 模拟浏览器 User-Agent(绕过简单反爬)
curl -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64)..." \
https://example.com
四、下载与断点续传
# 限速下载(防止占满宝塔服务器带宽)
curl --limit-rate 500k -O http://example.com/large.zip
# 断点续传(大文件下载中断后恢复)
curl -C - -O http://example.com/large.sql.gz
# 批量下载(按序号)
curl -O https://example.com/img_[1-10].jpg # 下载 img_1.jpg ~ img_10.jpg
五、代理与调试(排查宝塔/Nginx 问题)
# 通过本地 Socks5 代理测试(排查 IP 被封场景)
curl -x socks5h://127.0.0.1:1080 https://ip.sb
# 指定解析到某 IP(绕过 DNS,直接测试源站)
curl --resolve example.com:443:1.2.3.4 https://example.com
# 测试 Nginx 反向代理是否生效
curl -H "Host: api.example.com" http://127.0.0.1:8080/health
六、SSL/TLS 相关(自签证书场景)
# 忽略证书验证(测试环境临时使用,生产环境慎用)
curl -k https://self-signed.badssl.com
# 指定 CA 证书(宝塔面板自签证书调试)
curl --cacert /www/server/panel/ssl/certificate.pem \
https://panel.example.com:8888
# 查看证书详情
curl -vI https://example.com 2>&1 | grep -E "(subject|issuer|SSL)"
七、ThinkPHP / FastAdmin 接口调试专用
# 测试 TP 路由(带 pathinfo)
curl https://sks.fuuaapp.com/index.php/api/v1/user
# 模拟 AJAX 请求(TP 中判断 request()->isAjax())
curl -H "X-Requested-With: XMLHttpRequest" \
https://sks.fuuaapp.com/api/data
# 带 __token__ 的表单提交(TP 表单验证)
curl -X POST \
-d "name=test&__token__=ed558f90d96458c676bc4deeea9ce2e7" \
https://sks.fuuaapp.com/form/submit
八、实用组合命令(运维脚本用)
# 只取 HTTP 状态码(监控脚本用)
curl -s -o /dev/null -w "%{http_code}" https://example.com
# 取接口响应时间(排查慢请求)
curl -s -o /dev/null -w "DNS:%{time_namelookup} Connect:%{time_connect} Total:%{time_total}" https://api.example.com
# 配合 jq 解析 JSON(需先安装 jq)
curl -s https://api.github.com/users/octocat | jq '.id, .login'
# 循环测试 10 次并统计
for i in {1..10}; do curl -s -o /dev/null -w "%{time_total}\n" https://api.example.com; done | awk '{sum+=$1} END {print "Avg:", sum/NR}'
九、Windows 环境注意点
你在 Windows 计划任务中调度 PHP 脚本,若需配合 curl:
:: CMD 中注意引号转义
curl -X POST -H "Content-Type: application/json" -d "{\"key\":\"val\"}" https://api.com
:: 或改用文件避免转义地狱
curl -X POST -H "Content-Type: application/json" -d @C:\path\payload.json https://api.com
速记口诀 :-X 指定方法,-H 加头部,-d 传数据,-o 存文件,-v 看过程,-L 跟跳转,-k 跳过 SSL 验证(测试用)。