一、连通性与基础排错
1. 测试端口是否可达,比 telnet / nc 好在:curl 能同时测 TCP 连通 + HTTP 响应,一步到位
# 最常用:测试 TCP 端口通不通
curl -v telnet://192.168.1.10:3306
# 或利用 HTTP 测试
curl -v --connect-timeout 5 http://192.168.1.10:8080
2、只看 HTTP 状态码(批量巡检神器)
# -s 静默 -o 丢弃响应体 -w 只输出状态码
curl -s -o /dev/null -w "%{http_code}" https://example.com
# 批量巡检
for url in $(cat url_list.txt); do
code=$(curl -s -o /dev/null -w "%{http_code}" --connect-timeout 3 "$url")
echo "$url → $code"
done
3. 完整请求链路计时(排延迟必用)
# 自定义输出格式
curl -w '
DNS解析: %{time_namelookup}s
TCP连接: %{time_connect}s
TLS握手: %{time_appconnect}s
首字节: %{time_starttransfer}s
总耗时: %{time_total}s
下载速度: %{speed_download} B/s
' -o /dev/null -s https://example.com
输出结果:
DNS解析: 0.012s
TCP连接: 0.045s
TLS握手: 0.138s
首字节: 0.203s
总耗时: 0.215s
- time_namelookup 高 → DNS 慢
- time_connect – time_namelookup 高 → TCP 握手慢 / 网络 RTT 高
- time_appconnect – time_connect 高 → TLS 握手慢
- time_starttransfer – time_appconnect 高 → 服务端处理慢
4. 强制 IPv4 / IPv6
curl -4 https://example.com # 强制 IPv4
curl -6 https://example.com # 强制 IPv6
5. 跳过 DNS 直接用 IP 访问(验证 DNS 问题)
curl -v --resolve example.com:443:93.184.216.34 https://example.com
二、HTTP 协议调试
1. 看完整请求+响应头
curl -v https://example.com
# -v = verbose,显示请求头、响应头、SSL 信息
# 只显示响应头
curl -I https://example.com
# 显示请求头 + 响应头(更干净)
curl -s -D - https://example.com -o /dev/null
2. 指定 Host 头(测试虚拟主机)
# 用 IP 访问,但指定 Host
curl -H "Host: api.example.com" http://93.184.216.34/
# 或
curl --header "Host: api.example.com" http://93.184.216.34/
3. 自定义 Header
curl -H "Authorization: Bearer xxxxxx" https://api.example.com/v1/users
curl -H "Content-Type: application/json" -H "X-Request-ID: 12345" https://api.example.com
4. 跟随重定向
curl -L https://example.com
# 不加 -L 的话,遇到 301/302 只返回跳转头,不跟过去
5. 查看最终 URL(重定向链)
curl -s -o /dev/null -w "%{url_effective}" -L https://example.com
三、请求方法 + 数据发送
1. GET 带参数
curl "https://api.example.com/search?q=hello&page=1"
2. POST 表单
curl -X POST -d "username=admin&password=123456" https://api.example.com/login
# 编码
curl --data-urlencode "q=hello world" https://api.example.com/search
3. POST JSON(调 API 最常用)
curl -X POST \
-H "Content-Type: application/json" \
-d '{"name":"张三","age":30,"tags":["a","b"]}' \
https://api.example.com/v1/users
# 从文件读 body
curl -X POST -H "Content-Type: application/json" -d @body.json https://api.example.com
4. PUT / PATCH / DELETE
curl -X PUT -d '{"status":"active"}' https://api.example.com/v1/users/1
curl -X PATCH -d '{"email":"new@example.com"}' https://api.example.com/v1/users/1
curl -X DELETE https://api.example.com/v1/users/1
5. 上传文件
curl -X POST -F "file=@/tmp/test.jpg" https://api.example.com/upload
# 多文件 + 额外字段
curl -X POST \
-F "file1=@/tmp/a.jpg" \
-F "file2=@/tmp/b.jpg" \
-F "description=测试上传" \
https://api.example.com/upload
四、HTTPS / TLS 排错
1. 忽略证书验证(临时测试)
curl -k https://example.com
# 或
curl --insecure https://example.com
2. 指定客户端证书(双向 TLS)
curl --cert client.pem --key client.key https://api.example.com
curl --cert client.p12:密码 https://api.example.com
3、指定 CA 证书(自签 CA)
curl --cacert ca.crt https://internal.example.com
4、查看 TLS 握手详情
curl -v --trace - https://example.com 2>&1 | grep -i ssl
5、强制指定 TLS 版本
curl --tlsv1.2 https://example.com
curl --tlsv1.3 https://example.com
五、性能测试与压测
1、并发请求(配合 xargs)
# 10 个并发,每个请求 1 次
seq 100 | xargs -P 10 -I {} curl -s -o /dev/null -w "%{http_code}\n" https://example.com
2、持续请求 + 统计
# 请求 1000 次,统计成功/失败
for i in $(seq 1 1000); do
curl -s -o /dev/null -w "%{http_code}" --connect-timeout 3 https://example.com || echo "000"
done | sort | uniq -c
3、限制速率(模拟慢网络)
curl --limit-rate 100K https://example.com/large-file.zip
六、文件下载
1、下载文件
curl -O https://example.com/file.zip # 保留原文件名
curl -o myfile.zip https://example.com/file.zip # 指定文件名
curl -C - -O https://example.com/big.iso # 断点续传
2、下载 + 进度条
curl -# -O https://example.com/file.zip # 进度条
curl -s -O https://example.com/file.zip # 静默
七、认证
1、Basic Auth
curl -u username:password https://api.example.com
2、Bearer Token
curl -H "Authorization: Bearer eyJhbGciOi..." https://api.example.com
3、Cookie
curl -b "sessionid=abc123; user=admin" https://example.com
curl -c cookies.txt https://example.com/login # 保存 cookie
curl -b cookies.txt https://example.com/dashboard # 带 cookie 请求
八、代理
1、HTTP代理
curl -x http://proxy:8080 https://example.com
curl --proxy http://user:pass@proxy:8080 https://example.com
2、SOCKS 代理
curl --socks5 127.0.0.1:1080 https://example.com
3、不走代理
curl --noproxy "*" https://internal.example.com
九、调试与抓包
1、输出完整通信过程
curl -v https://example.com # 显示 header
curl --trace trace.log https://example.com # 二进制级追踪
curl --trace-ascii trace.txt https://example.com # ASCII 追踪
2、只看特定信息
# 只看响应头
curl -s -D - https://example.com -o /dev/null
# 只看 IP 和端口
curl -s -o /dev/null -w "IP: %{remote_ip} Port: %{remote_port}\n" https://example.com
# 看 SSL 证书信息
curl -v https://example.com 2>&1 | grep -i "subject:\|issuer:\|expire"
十、运维脚本常用变量速查
# curl -w 可用变量(最常用)
%{http_code} # HTTP 状态码
%{time_namelookup} # DNS 解析时间
%{time_connect} # TCP 连接时间
%{time_appconnect} # TLS 握手时间
%{time_starttransfer} # 首字节时间
%{time_total} # 总耗时
%{speed_download} # 下载速度
%{remote_ip} # 远程 IP
%{remote_port} # 远程端口
%{url_effective} # 最终 URL
%{num_redirects} # 重定向次数
%{size_download} # 下载字节数
%{response_code} # 同 http_code
十一、常见运维场景速查
| 场景 | 命令 |
|---|---|
| 端口通不通 | curl -v --connect-timeout 5 http://IP:PORT |
| 网站状态码 | curl -s -o /dev/null -w "%{http_code}" URL |
| 接口延迟分析 | curl -w "@format" -o /dev/null -s URL |
| 调 POST API | curl -X POST -H "Content-Type: application/json" -d '{}' URL |
| 忽略证书测内网 | curl -k -v https://内网IP |
| 模拟 Host 访问 | curl -H "Host: xxx" http://IP |
| 文件下载 | curl -O URL |
| 断点续传 | curl -C - -O URL |
| 带 Cookie 请求 | curl -b "key=val" URL |
| 代理测试 | curl -x proxy:port URL |
| 强制 IPv4 | curl -4 URL |
| 看重定向链 | curl -L -s -o /dev/null -w "%{url_effective}" URL |
| 批量健康检查 | for ip in ips; do curl -s -o /dev/null -w "%{http_code}" http://$ip/health; done |


