【全栈开发03】------ curl 常用参数详解与 HTTP 请求实战
在接口开发、联调与测试过程中,curl 是命令行下最通用、最轻量化的 HTTP 请求工具,无需 GUI 即可快速发送 GET/POST/PUT 等请求、上传文件、调试接口,堪称后端开发的 "瑞士军刀"。
前文我分别梳理了HTTP 请求方法 与HTTP 请求参数的核心规范:
本文将基于以上 HTTP 基础,系统讲解 curl 所有高频参数的含义、用法与实战示例,让你一条命令搞定接口调试。
一、curl 基础认知
1.1 什么是 curl
curl = Client URL ,是跨平台命令行工具,支持 HTTP/HTTPS/FTP 等协议,用于发送网络请求、接收响应、上传 / 下载文件。
1.2 基础语法
运行
curl [参数选项] 请求地址URL
- 不加参数:默认发送GET 请求
- 加参数:实现 POST、传参、上传、加请求头等复杂操作
二、HTTP 请求方法极简回顾(必看)
curl 的 -X 参数用于指定请求方法,方法语义严格遵循 HTTP 规范,这里快速回顾核心方法(详情看前文链接):
- GET:查询资源,参数放 URL(Query),无请求体
- POST:提交 / 创建资源,参数放请求体(Body)
- PUT:全量更新资源
- DELETE:删除资源
- PATCH:部分更新资源
- HEAD:仅获取响应头,不返回体
- OPTIONS:跨域预检、查询支持的方法
三、HTTP 请求参数极简回顾(必看)
curl 传参对应 HTTP 参数位置,不同参数用不同 curl 命令:
- Query 参数 :URL 后拼接
?key=val&key2=val2 - Header 参数:请求头区域,放 Token、Content-Type 等
- Body 参数:请求体,放 JSON、表单、文件
- Path 参数 :URL 路径部分,如
/api/user/10086
四、curl 核心参数全解(按场景分类)
4.1 请求方法类参数
-X / --request
- 含义:指定 HTTP 请求方法(GET/POST/PUT/DELETE 等)
- 用法 :
-X 方法名 - 示例:
运行
# 发送POST请求
curl -X POST http://localhost:5000/extract
# 发送DELETE请求
curl -X DELETE http://localhost:5000/user/10086
4.2 数据提交类参数(最常用)
1)-d / --data
- 含义 :发送普通表单数据 (
application/x-www-form-urlencoded),不能传文件 - 规则 :
key=val&key2=val2,自动适配 POST 请求 - 示例:
运行
curl -X POST -d "username=admin&password=123456" http://localhost:5000/login
2)✅ -F / --form
-
含义 :发送表单 + 文件上传 (
multipart/form-data) -
curl 强制规则:
- 文本:
字段名=值 - 文件:字段名 =@本地文件路径 (
@是 curl 规定的文件标识)
- 文本:
-
你的实战示例:
运行
curl -F 'image=@fee3df962d763b2242ac0f6bf47b61cd.jpg' http://localhost:5000/extract
- 多字段混合:
运行
curl -F "image=@pic.jpg" -F "type=phone" http://localhost:5000/extract
3)--data-raw
- 含义 :发送原始数据(如 JSON),不解析
@符号 - 示例:
运行
curl -X POST -H "Content-Type: application/json" --data-raw '{"phone":"198xxxx0501"}' http://localhost:5000/api
4.3 请求头类参数
-H / --header
- 含义:添加 / 修改 HTTP 请求头(Token、Content-Type、Api-Version)
- 用法 :
-H "键:值",可多个 - 示例:
运行
# 发送JSON请求必备
curl -X POST -H "Content-Type: application/json" -d '{"username":"test"}' http://localhost:5000/register
# 带Token认证
curl -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9" http://localhost:5000/user/info
4.4 调试类参数
1)-v / --verbose
- 含义 :调试神器,显示完整请求过程(请求头、参数、响应、握手信息)
- 用法:接口报错必加
运行
curl -v -F "image=@pic.jpg" http://localhost:5000/extract
2)-i
- 含义 :输出响应头 + 响应体
运行
curl -i http://localhost:5000/extract
3)-I(大写 i)
- 含义 :仅获取响应头(对应 HTTP HEAD 方法)
运行
curl -I http://localhost:5000/user/10086
4.5 文件下载类参数
1)-O(大写 o)
- 含义 :下载文件,自动用远程文件名保存
运行
curl -O https://example.com/img.jpg
2)-o(小写 o)
- 含义 :下载文件,自定义本地文件名
运行
curl -o my_pic.jpg https://example.com/img.jpg
4.6 认证与安全类参数
1)-u / --user
- 含义:基础身份验证(用户名:密码)
运行
curl -u admin:123456 http://localhost:5000/auth
2)-k / --insecure
- 含义:忽略 SSL 证书校验(调试自签证书接口用)
运行
curl -k https://localhost:5000/extract
4.7 其他实用参数
表格
| 参数 | 全称 | 含义 |
|---|---|---|
-L |
--location |
自动跟随 3xx 重定向 |
-s |
--silent |
静默模式,不显示进度条 |
-A |
--user-agent |
模拟浏览器 UA |
五、高频实战场景(直接复制用)
场景 1:GET 请求 + Query 参数
运行
curl "http://localhost:5000/goods?page=1&size=10&keyword=手机"
场景 2:POST 请求 + JSON 数据
运行
curl -X POST -H "Content-Type: application/json" -d '{"username":"test","password":"123456"}' http://localhost:5000/register
场景 3:文件上传(你的核心场景)
运行
curl -F "image=@你的文件路径" http://localhost:5000/extract
场景 4:接口调试(查错必备)
运行
curl -v -F "image=@test.jpg" http://localhost:5000/extract
场景 5:下载文件
运行
curl -O https://example.com/file.jpg
六、新手必避 5 大误区
-F不加@:把文件名当文本传,无法上传文件- GET 请求用 Body:HTTP 规范允许但框架忽略,参数放 Query/Path
- 传 JSON 不加
Content-Type:后端无法解析,报 400/500 - 敏感数据放 URL:Token、密码用 Query 会泄露,用 Body/Header
- 字段名不匹配 :
curl的image=必须和后端request.files.get("image")一致