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

ლ玉英 阅读 73

我在用 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 收藏
二维码
手机扫码查看
2 条解答
ლ嘉煊
ლ嘉煊 Lv1
这个问题挺常见的,你描述的操作看起来没问题,但有几个地方容易掉坑:

首先确认一下:你是在 Body 标签页里选了 x-www-form-urlencoded 之后,下面的输入框里填的 key-value 吧?Postman 这儿有个容易忽略的地方——你填完 key 和 value 之后要点右边的 "Add" 按钮或者按回车键添加进去,光填完没添加是不行的。添加成功后上面会显示一个 key-value 列表。

然后检查一下后端收参的名称对不对,username 和 password 这两个字段名是否完全匹配(包括大小写)。

如果你确定以上都没问题,可以用 Postman 的控制台看一下实际发送的请求。点左下角那个 Console 按钮,打开后发送请求,能看到实际发的请求头和请求体。确认 Content-Type 确实是 application/x-www-form-urlencoded,且 body 里的数据是 username=testuser&password=123456 这种格式。

还有个偏门招:如果服务端用的是某些框架的特定写法,可能需要确认下是否需要额外传 Content-Length 头,不过这个一般 Postman 自动会加。

你把上面几个点过一遍,基本能定位问题在哪儿。
点赞
2026-03-12 13:07
小可歆
小可歆 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 发的。
点赞 3
2026-03-04 08:02