【全栈开发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 命令一次写对,联调效率翻倍

相关推荐
志栋智能6 小时前
超越监控:超自动化巡检提供的主动价值
运维·网络·人工智能·自动化
MAXrxc6 小时前
OSPF综合实验
网络
AIMath~8 小时前
向github中上传文件过大超过50M怎么办
网络·git·github
Sagittarius_A*8 小时前
H3CSE 高性能园区网:SNMP 网络管理协议详解
网络·计算机网络·安全·h3cse
杨充8 小时前
1.1 数据编码设计原理
linux·运维·网络·底层原理·数据编码
缪懿8 小时前
网络层和数据链路层中的常见协议解析
网络·网络协议·java-ee
CoreTK_EMC9 小时前
牙科医疗器械 ESD 静电整改案例|芯通康医疗级方案,护航诊疗安全与合规
网络·学习·emc整改·芯通康
♛识尔如昼♛9 小时前
C 进阶(15) - 网络IPC:套接字
网络·套接字
jscxy52069 小时前
ospf综合实验
运维·服务器·网络
IP搭子来一个9 小时前
爬虫使用代理 IP 频繁失效,该如何定位问题?
网络·爬虫·tcp/ip