
06 curl 命令行工具 - 接口调试的终极利器本章目标掌握curl命令的各种用法能够在命令行中完成所有接口测试操作。6.1 什么是curlcurl是一个命令行工具用于在客户端与服务器之间传输数据支持多种协议HTTP、HTTPS、FTP等。为什么学curl无需安装GUI脚本化自动化服务器环境必备快速调试管道组合场景服务器上没有Postman只有命令行 → 用curl需要把接口测试集成到Shell脚本 → 用curl快速验证一个接口 → 用curl比打开Postman更快6.2 curl 基础用法GET请求# 最简单的GET请求 curl https://jsonplaceholder.typicode.com/posts/1 # 带查询参数 curl https://api.example.com/users?page1size20 # 显示响应头信息 curl -i https://jsonplaceholder.typicode.com/posts/1 # 只显示响应头 curl -I https://jsonplaceholder.typicode.com/posts/1 # 跟随重定向 curl -L https://bit.ly/xxx # 保存响应到文件 curl -o response.json https://jsonplaceholder.typicode.com/posts/1POST请求# POST JSON数据 curl -X POST https://jsonplaceholder.typicode.com/posts -H Content-Type: application/json -d {title:foo,body:bar,userId:1} # POST表单数据 curl -X POST https://api.example.com/login -d usernameadmin -d password123456 # POST文件 curl -X POST https://api.example.com/upload -F file/path/to/file.jpg -F description我的图片其他HTTP方法# PUT请求 curl -X PUT https://jsonplaceholder.typicode.com/posts/1 -H Content-Type: application/json -d {title:updated,body:new body} # DELETE请求 curl -X DELETE https://jsonplaceholder.typicode.com/posts/1 # PATCH请求 curl -X PATCH https://jsonplaceholder.typicode.com/posts/1 -H Content-Type: application/json -d {title:patched}6.3 curl 常用选项速查表选项全称说明示例-X--request指定HTTP方法-X POST-H--header添加请求头-H Content-Type: json-d--data发送数据-d {key:val}-F--form发送表单数据-F filea.jpg-o--output输出到文件-o result.json-i--include包含响应头-i-I--head只获取响应头-I-v--verbose详细模式-v-s--silent静默模式-s-L--location跟随重定向-L-u--user用户名密码-u admin:123456-k--insecure忽略SSL证书-k--cookie发送Cookie--cookie sessionabc--cookie-jar保存Cookie--cookie-jar cookies.txt6.4 认证方式Basic Authcurl -u username:password https://api.example.com/protected # 或 curl -H Authorization: Basic $(echo -n user:pass | base64) https://api.example.com/protectedBearer Tokencurl -H Authorization: Bearer eyJhbGciOiJIUzI1NiIs... https://api.example.com/usersAPI Key# 通过Header传递 curl -H X-API-Key: your-api-key https://api.example.com/data # 通过Query传递 curl https://api.example.com/data?api_keyyour-api-key6.5 高级技巧保存和携带Cookie# 登录并保存Cookie curl -X POST https://api.example.com/login -d usernameadminpassword123 --cookie-jar cookies.txt # 使用保存的Cookie访问 curl https://api.example.com/profile --cookie cookies.txt上传下载文件# 下载文件显示进度条 curl -O https://example.com/file.zip # 下载文件指定文件名 curl -o myfile.zip https://example.com/file.zip # 断点续传 curl -C - -o largefile.zip https://example.com/large.zip # 上传文件 curl -F file/path/to/local/file.jpg https://api.example.com/upload使用代理# HTTP代理 curl -x http://proxy.example.com:8080 https://target.com # SOCKS5代理 curl -x socks5://127.0.0.1:1080 https://target.com限制请求时间# 连接超时5秒总超时30秒 curl --connect-timeout 5 --max-time 30 https://api.example.com/slow6.6 curl 实战脚本自动化测试脚本示例#!/bin/bash # 接口测试脚本 BASE_URLhttps://jsonplaceholder.typicode.com PASS0 FAIL0 # 测试1GET请求 echo 测试1: GET /posts/1 RESPONSE$(curl -s -o /dev/null -w %{http_code} $BASE_URL/posts/1) if [ $RESPONSE -eq 200 ]; then echo ✓ 通过 ((PASS)) else echo ✗ 失败 (状态码: $RESPONSE) ((FAIL)) fi # 测试2POST请求 echo 测试2: POST /posts RESPONSE$(curl -s -o /dev/null -w %{http_code} -X POST $BASE_URL/posts -H Content-Type: application/json -d {title:test,body:test,userId:1}) if [ $RESPONSE -eq 201 ]; then echo ✓ 通过 ((PASS)) else echo ✗ 失败 (状态码: $RESPONSE) ((FAIL)) fi # 测试3验证响应内容 echo 测试3: 验证响应JSON字段 TITLE$(curl -s $BASE_URL/posts/1 | grep -o title[^,]* | cut -d -f4) if [ -n $TITLE ]; then echo ✓ 通过 (title: $TITLE) ((PASS)) else echo ✗ 失败 ((FAIL)) fi echo echo echo 通过: $PASS echo 失败: $FAIL echo 结合jq处理JSON# 安装jqJSON处理器 # macOS: brew install jq # Ubuntu: apt-get install jq # 格式化JSON输出 curl -s https://jsonplaceholder.typicode.com/posts/1 | jq # 提取特定字段 curl -s https://jsonplaceholder.typicode.com/posts/1 | jq .title # 提取数组中的字段 curl -s https://jsonplaceholder.typicode.com/posts | jq .[0:3] | .[].title # 复杂查询 curl -s https://jsonplaceholder.typicode.com/posts | jq [.[] | {id: .id, title: .title}]6.7 curl vs Postman 对比场景curlPostman快速调试✓ 命令行直接执行需要打开应用复杂断言需要配合jq等工具内置断言功能团队协作需要分享脚本直接分享Collection自动化CI/CD✓ 天然支持需要Newman可视化无✓ 界面友好历史记录无✓ 自动保存建议日常调试用Postman自动化脚本用curl。6.8 本章小结curl核心命令GET请求curl URL、curl -i URL、curl -I URLPOST请求curl -X POST -d data URL、curl -F filepath URL认证-u user:pass、-H Bearer token输出控制-o file、-s 静默、-v 详细高级--cookie、-L 重定向、-x 代理课后练习 基础题用curl访问https://jsonplaceholder.typicode.com/posts只显示前3条数据的title。进阶题编写一个Shell脚本测试登录接口成功/失败场景并输出测试报告。挑战题用curl jq实现一个完整的用户CRUD测试脚本。6.9 下章预告下一章我们将学习JMeter用它来做接口性能和压力测试curl是程序员的瑞士军刀掌握它你就能在任何环境下与API对话。