【全栈开发03】—— curl 常用参数详解与 HTTP 请求实战

【全栈开发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 规范,这里快速回顾核心方法(详情看前文链接):

  1. GET:查询资源,参数放 URL(Query),无请求体
  2. POST:提交 / 创建资源,参数放请求体(Body)
  3. PUT:全量更新资源
  4. DELETE:删除资源
  5. PATCH:部分更新资源
  6. HEAD:仅获取响应头,不返回体
  7. OPTIONS:跨域预检、查询支持的方法

三、HTTP 请求参数极简回顾(必看)

curl 传参对应 HTTP 参数位置,不同参数用不同 curl 命令:

  1. Query 参数 :URL 后拼接?key=val&key2=val2
  2. Header 参数:请求头区域,放 Token、Content-Type 等
  3. Body 参数:请求体,放 JSON、表单、文件
  4. 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 大误区

  1. -F 不加@:把文件名当文本传,无法上传文件
  2. GET 请求用 Body:HTTP 规范允许但框架忽略,参数放 Query/Path
  3. 传 JSON 不加Content-Type:后端无法解析,报 400/500
  4. 敏感数据放 URL:Token、密码用 Query 会泄露,用 Body/Header
  5. 字段名不匹配curlimage=必须和后端request.files.get("image")一致

七、总结

  1. curl 是 HTTP 请求的命令行实现,参数完全对应 HTTP 方法与参数位置

  2. @ 是 curl 规定字段名是后端规定,业务代码只处理数据不关心上传格式

  3. 核心参数速记:

    • -X:指定请求方法
    • -F+@:文件上传
    • -d:普通表单
    • -H:请求头
    • -v:调试
  4. 结合HTTP 请求方法HTTP 参数类型,curl 命令一次写对,联调效率翻倍

相关推荐
S1998_1997111609•X2 小时前
哈希树函数洪水泛滥污染孪生镜像导致生物量子信息泄露以钩子而爬虫植入ssd探测
爬虫·网络协议·缓存·哈希算法·开闭原则
xlq223222 小时前
52.TcpSocket
linux·服务器·网络
QH139292318802 小时前
罗德与施瓦茨 FSW26 FSW43 FSW50高端信号分析仪
网络·功能测试·单元测试·集成测试·模块测试
白山云北诗2 小时前
零成本/低成本!个人站长DDoS防护实战方案
网络·安全·ddos
jimy12 小时前
Oracle的always free账户,提高网络使用率的保活脚本
服务器·网络·oracle
一渊之隔2 小时前
uniapp蓝牙搜索连接展示蓝牙设备包含信号显示
前端·网络·uni-app·bluetooth
xhbh6662 小时前
Windows网络转发如何配置?netsh命令完整指南
服务器·网络·windows·ip·端口流量转发·路由端口转发·ip隐藏
志栋智能2 小时前
超自动化巡检:敏捷运维体系中的重要一环
运维·服务器·网络·云原生·容器·kubernetes·自动化
小杰3123 小时前
网络框架源码阅读技巧
服务器·网络·c++·reactor·zlmediakit·zltoolkit