cURL 发送 GET 请求终极指南总结
cURL 发送 GET 请求终极指南总结
一、基础用法
cURL 是跨平台命令行工具,支持 HTTP/HTTPS 等协议,适用于 API 测试与调试。
1. 核心操作
- 最简 GET 请求:直接指定 URLcurl https://api.example.com/data
- 添加请求头:通过-H选项添加(如认证、内容类型)curl -H "Authorization: Bearer your_token" -H "Content-Type: application/json" https://api.example.com/data
- 处理 JSON 响应:结合jq格式化输出(需先安装jq)curl https://api.example.com/data | jq .
- 保存响应到文件:使用-o选项指定文件名curl -o response.json https://api.example.com/data
二、针对用户场景的专用命令
1. 测试用户档案端点
验证 JWT 认证的核心接口:
curl -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." http://127.0.0.1:8000/api/users/me/
2. 测试诊断端点
检查令牌完整性与验证状态:
curl -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." http://127.0.0.1:8000/api/auth/diagnostic/
3. Base64 编码令牌
适用于特殊传输场景(如需编码令牌):
ENCODED_TOKEN=$(echo -n "原始令牌" | base64) # 编码令牌
curl -H "Authorization: Bearer base64:$ENCODED_TOKEN" http://127.0.0.1:8000/api/users/me/
三、高级用法
1. 调试与监控
- 详细输出:使用-v查看完整请求/响应头(含连接过程)curl -v -H "Authorization: Bearer your_token" http://127.0.0.1:8000/api/users/me/
- 仅响应头:使用-I快速获取状态码等元信息curl -I -H "Authorization: Bearer your_token" http://127.0.0.1:8000/api/users/me/
- 跟随重定向:-L自动跳转(如 API 重定向场景)curl -L https://api.example.com/redirect
- 忽略 SSL 验证(仅测试用):-k跳过证书检查curl -k https://localhost:8000/api/users/me/
- 设置超时:-m限制请求最大耗时(秒)curl -m 10 https://api.example.com/data # 10秒超时
2. 异常处理
四、实用技巧
1. 脚本自动化
编写 Bash 脚本实现测试流程:
#!/bin/bash
API_URL="http://127.0.0.1:8000/api/users/me/"
TOKEN="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
response=$(curl -s -H "Authorization: Bearer $TOKEN" $API_URL)
if [ $? -eq 0 ]; then
echo "请求成功:"
echo $response | jq . # 格式化输出
else
echo "请求失败"
fi
2. 分页与查询
- 分页 API:结合jq提取下一页链接next_page=$(curl -s "https://api.example.com/data?page=1" | jq -r '.next_page')
curl $next_page
- 查询参数:直接拼接 URL(或-G配合-d)curl "http://api.example.com/search?q=keyword&limit=10&sort=desc"
3. 性能测试
统计请求各阶段耗时(如 DNS 解析、连接时间):
curl -w "\n时间统计:\n总时间: %{time_total}秒\nDNS 解析: %{time_namelookup}秒\n连接时间: %{time_connect}秒\n" \
-o /dev/null -s https://api.example.com/data
五、常见问题解决
问题场景 |
解决方案 |
特殊字符(空格等) |
URL 编码:curl "https://api.example.com/search?q=$(echo 'query' | jq -sRr @uri)" |
gzip 压缩响应 |
添加头并解压:curl -H "Accept-Encoding: gzip" --compressed https://api.example.com/data |
保存/复用 Cookie |
保存:curl -c cookies.txt https://api.example.com/login;使用:curl -b cookies.txt https://api.example.com/protected |
六、cURL 命令选项速查
选项 |
说明 |
示例 |
-H |
添加请求头 |
-H "Content-Type: application/json" |
-o |
保存响应到文件 |
-o response.json |
-v |
详细输出(调试模式) |
-v |
-L |
跟随重定向 |
-L |
-k |
忽略 SSL 证书验证 |
-k |
-m |
设置超时时间(秒) |
-m 10 |
-s |
静默模式(无进度输出) |
-s |
七、Windows 环境使用
1. 安装与配置
- 下载地址:cURL for Windows
- 或使用 Git Bash(内置类 Linux 环境)。
- CMD 终端:curl.exe -H "Authorization: Bearer your_token" http://127.0.0.1:8000/api/users/me/
- PowerShell(推荐使用原生curl.exe):curl.exe -Uri "http://127.0.0.1:8000/api/users/me/" -Headers @{"Authorization"="Bearer your_token"}
- 零签名修改:不篡改令牌任何部分,确保 JWT 签名完整性(解决传输中签名被改问题)。
- 精确控制:完全手动管理请求头/体,避免测试工具隐式处理。
- 脚本化测试:支持自动化脚本,便于回归测试与持续集成。
- 跨平台一致:Windows/macOS/Linux 表现统一,兼容性强。
2. 基础命令示例
八、推荐 cURL 的核心优势
cURL 是解决 API 测试中令牌签名篡改问题的可靠工具,尤其适合需要精确控制请求的场景。