首页/系统/Linux 运维命令速查/curl 发送 POST 与上传
网络命令82 条

curl 发送 POST 与上传

提交表单(-d,默认 application/x-www-form-urlencoded)、JSON(-H 指定类型)、上传文件(-F)、URL 编码(--data-urlencode)。

Linux 运维命令速查系统更新于 2026-10-13

curl 提交数据是什么

curl 提交数据主要靠三组参数:-d 提交表单(默认内容类型为表单编码),搭配 -H 再指定 JSON 类型,-F 走 multipart 上传文件。含特殊字符的数据用 --data-urlencode 做编码,避免请求体被破坏。

基本信息

适用平台跨平台,Linux / macOS / Windows 均有官方版本
命令语法curl [-d|-F|--data-urlencode] [选项] URL
常用选项-d 数据、-H 头、-F 表单文件、-G 拼查询串、-X 指定方法
数据来源字符串、@文件读取内容、@- 读标准输入

典型使用场景

  • 调接口验证:提交 JSON 到业务接口,确认返回与副作用符合预期
  • 表单提交:模拟浏览器提交登录或配置表单
  • 文件上传:用 -F 走 multipart,等价于网页上传控件
  • 查询参数编码:含空格与与号的参数用编码参数避免破坏请求
  • 批量调用:配合 shell 循环与静默模式串联成脚本

常用示例

常用示例
curl -sS -d 'name=ops&level=1' https://api.example.com/items
curl -sS -G --data-urlencode 'q=hello world & more' https://api.example.com/search
curl -sS -H 'Content-Type: application/json' -d '{"name": "web01", "port": 8080}' https://api.example.com/items
curl -sS -F 'file=@/tmp/backup.tar.gz' https://api.example.com/upload
curl -sS -X PUT -H 'Content-Type: application/json' -d @body.json https://api.example.com/items/1
curl -sS -o /dev/null -w '%{http_code} %{time_total}\n' -d 'a=1' https://api.example.com/items

参数对照

参数作用注意
-d发送数据体并隐含 POST不自动编码,空格与与号会破坏表单
--data-urlencode对数据做 URL 编码比直接 -d 安全,常配 -G
-G把数据拼到查询串与编码参数连用最自然
-H自定义请求头发 JSON 必须显式声明内容类型
-Fmultipart 表单上传文件用 @路径,自动生成边界
@文件 与 @-从文件或标准输入读取大数据量可避免命令行过长
-d 会自动把请求方法变成 POST,需要 PUT 或 DELETE 时用 -X 显式指定。
静默模式组合是脚本里的推荐写法:关闭进度输出,同时保留错误信息。
提交失败时先看状态码与响应头:加 -i 打印响应头、加 -v 查看完整请求过程,能快速区分是请求构造错误还是服务端拒绝。
表单字段含中文或特殊符号时统一走编码参数,避免服务端收到的值与预期不一致。
JSON 正文在外层用单引号包住最稳,混用引号是 curl 报错的高发区;复杂正文建议写进文件用 @文件 方式提交。

易错点

  • JSON 里的双引号与外层引号混用会导致 shell 解析错误,外层统一用单引号或改为从文件读取
  • 普通 -d 不做编码,参数含空格或与号时提交内容会被截断,应改用编码参数
  • 用 -G 时所有数据都会拼进查询串,误用在写操作上会把参数暴露在 URL 与访问日志里
  • 上传大文件时误用 -d 会把整个文件内容塞进命令行与内存,应使用 -F 提交文件

数据来源与参考

  • curl 官方文档(curl.se/docs/manpage.html)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌