Postman 发送 POST 请求时 HTML 表单数据怎么传?

ლ玉英 阅读 4

我在用 Postman 测试一个登录接口,后端是接收 HTML 表单格式的 POST 数据(Content-Type: application/x-www-form-urlencoded),但我试了好几次都报错,说参数缺失。我明明在 Body 里选了 x-www-form-urlencoded 并填了 username 和 password 啊?

前端页面里的表单大概是这样的:

<form action="/login" method="post">
  <input type="text" name="username" value="testuser" />
  <input type="password" name="password" value="123456" />
  <button type="submit">登录</button>
</form>

Postman 里是不是还要额外设置什么?还是我哪里理解错了?

我来解答 赞 5 收藏
二维码
手机扫码查看
1 条解答
小可歆
小可歆 Lv1
这个坑我以前也踩过,大概率是 Key 名字对不上,或者 Header 被你手动改乱了。

先看你的 HTML 代码,input 标签的 name 属性是 usernamepassword。你在 Postman 的 Body 里选了 x-www-form-urlencoded 之后,Key 这一栏填的必须跟 name 属性一模一样,少个字母或者大小写不对都不行。有些后端框架对参数名特别敏感,比如你 Key 写成了 user 或者 name,后端收到的就是 null。

另外一个特别常见的问题是 Header 设置。Postman 很智能,你选了 Body 类型后,它会自动在 Headers 里帮你加上 Content-Type: application/x-www-form-urlencoded。这时候你千万别去 Headers 标签页里手动再添加一遍这个 Content-Type。如果你手动加了,Postman 可能会优先用手动设置的,导致格式冲突,后端解析出来就是空的。你去 Headers 那个标签页检查一下,如果有 Content-Type 这一行,直接删掉,让 Postman 自动处理就行。

如果上面都对了还是不行,那可能是后端有 CSRF 防护,需要传个 token,不过看你给的 HTML 里没这个字段,先不管它。

试试按下面这样设置:

在 Postman 左侧选 Body,勾选 x-www-form-urlencoded。
Key 填 username,Value 填 testuser。
Key 填 password,Value 填 123456。
切换到 Headers 标签页,确保没有 Content-Type 这一行(如果有就删掉)。

这样一般就能通了。如果还不行,建议用浏览器的 F12 抓个包看看浏览器实际发出去的数据长啥样,对比一下 Postman 发的。
点赞
2026-03-04 08:02