表单提交必须用x-www-form-urlencoded,因后端框架默认仅解析该格式;它自动编码为key=value&key2=value2,而raw(JSON)和form-data(multipart)需不同解析器,不匹配则参数为空。

Postman 提交表单数据,核心就一条:必须用 x-www-form-urlencoded 编码,且不能手动改 Content-Type 头——否则后端大概率收不到参数。
为什么选 x-www-form-urlencoded 而不是 raw 或 form-data
表单提交(比如登录、注册)绝大多数后端框架(Laravel、Spring Boot、ThinkPHP、Django 等)默认只解析 application/x-www-form-urlencoded 格式的数据。它把参数转成 key1=value1&key2=value2 的字符串,并自动做 URL 编码(空格→%20,中文→%E4%BD%A0 等)。
-
raw → JSON:后端收到的是原始 JSON 字符串,request.getParameter("username")会返回null(Java)或None(Python),因为没走表单解析逻辑 -
form-data:本质是多部分上传,带边界符(----WebKitFormBoundary...),适合传文件;纯文本字段也会被包一层,后端需用 multipart 解析器,普通表单接口不认这个 -
x-www-form-urlencoded:Postman 会自动设置Content-Type: application/x-www-form-urlencoded,并帮你编码值——这才是“表单语义”本身
实际操作:三步填对,别碰 headers
打开 Postman,新建一个 POST 请求,URL 填好(如 http://localhost/index.php?m=Home&c=User&a=do_login),然后:
- 在
Body标签页下,**必须点选x-www-form-urlencoded**(不是form-data,也不是raw) - 在下方表格里,左列填 key(如
username),右列填 value(如13488888888),每行一对;Postman 会自动对 value 做 URL 编码 - **绝对不要手动在
Headers里加或改Content-Type**——选了x-www-form-urlencoded后,Postman 已自动设置,手改反而可能覆盖掉正确的值
常见失败现象和排查点
发出去返回 400、500,或者后端日志里显示参数全为空?先看这几点:
Postman 12.27.7 Windows x64 官方安装包,适用于 API 设计、调试、测试与协作。该系列包含 Enterprise 云端性能测试静态 IP 出口能力,以及接口规范标签管理改进,适合受限网络测试与规范资源组织场景。
- 请求方法是不是误用了
GET?表单提交必须是POST - URL 末尾有没有多余斜杠或空格?比如
do_login /和do_login可能路由不匹配 - 参数 key 名写错了吗?比如后端要
verify_code,你写了verifyCode或code - 值里含中文/特殊字符但没确认是否被正确编码?可右键 value 单元格 →
EncodeURIComponent手动触发一次(不过通常不用,Postman 默认做了) - 后端是否校验了
Referer或Origin?某些老系统会拦截非浏览器来源请求——这时得在Headers里临时加一条Origin: http://localhost
和 JSON 提交混用时的典型误区
同一个登录接口,前端用 HTML 表单提交是 x-www-form-urlencoded,但用 Axios 发送却是 application/json ——这是两种完全不同的协议约定,后端必须分别适配。Postman 里切错模式就会直接失败:
- 看到文档写 “传 {\"mobile\":\"138...\",\"password\":\"123...\"}”,那就是 JSON 模式,
Body → raw → JSON,且 header 要显式设Content-Type: application/json - 看到文档写 “参数:username、password、verify_code”,没提 JSON,基本就是表单模式,死守
x-www-form-urlencoded - 别指望用
form-data模拟表单成功——即使字段名对了,后端收不到,因为解析器不匹配
最麻烦的情况是后端没明确文档,又同时支持两种格式。这时候得靠响应体里的错误提示反推:如果返回 “missing parameter 'username'”,说明它在找表单参数;如果返回 “JSON parse error” 或 “invalid json”,说明它在等 JSON。










