【Postman】测试 Post 请求时传递数据失败 & 常见传参方式

近期尝试使用 nod.js + vue 开发一个小项目。
第一次使用 postman 测试,遇到 POST 请求数据发送不过去的问题,做一个记录。

JS 部分代码

//用户注册接口
router.post('/register', function (req, res, next) {
	  //验证
	  if (1===1) {
	    //console.log(req.body);
	    res.json({status: 1, message: '用户名不能为空' + req.body.username});
	  }
});

Postman测试

由于是第一次使用,开始测试过几个 GET 请求,一切测试正常。
测试 POST 请求时,只是简单的将请求类型改为了 “POST”。如图:

img1

发现传递到请求中的 username 值为 undefined。
也就是说传值失败了 …

后来研究了半天,发现了 URL 的奇怪之处。
POST 请求的参数不是不应该出现在 URL 中么?

补充一下: 之前记录这篇文章时对 POST 传参方式,仅限于日常项目中所见,故存在一点误解,后来了解过一点这方面知识之后,反而忘记了这篇文章,直到最近翻看到时才发现,所以做一点补充与更正,如之前有误导各位读者,敬请原谅。

此处需要更正一点:

POST 请求的参数并非不能出现在 URL 中,仅仅是因为我们经常将其放在 body 中传输。

实际上,不论是 GET 请求还是 POST 请求,传参的方式都既可以放在 url 中也可以放在 body 中

只不过大多数 POST 请求的参数通过 body 传递参数,也有少部分 POST 请求通过 url 传递参数,其能否传参成功还取决于后台代码对于参数的接收要求,如 Java 中的 @RequestParam 和 @RequestBody 在这里就分别意味着从 url 中取参和从 body 中取参;同样,C# 中也有 FromUrl 和 FromBody 来标记接收参数的方式。

另外,有一点不同的是 GET 请求,常见的 GET 请求 99% 都是通过 URL 传参的,但并没有规定 GET 请求不可以通过 body 传参,只能说 GET 请求通过 body 传参的方式是不被推荐的,以至于市面上部分框架和软件并不支持 GET 请求通过 body 方式传参(也可能暂时不支持,后期会支持),比如著名的接口测试工具 Postman 的上一个版本(Postman 最新版本已经支持,但上个版本是不支持的),OkHttpClient 框架(java.lang.IllegalArgumentException: method GET must not have a request body) ,当然也有很多框架和软件是支持的,比如典型的 Spring 框架等。

正因为如此,为了保证代码的稳定性、兼容性和可移植性,我们目前强烈建议除非特殊需求特殊场景下,尽量避免 GET 请求通过 body 方式传参的方式。

于是,考虑到可能是只修改了 POST 的 URL 请求类型,而没有修改传参方式。

发现,Postman 还提供了很多可选项的。

img2

Params:参数。会直接出现在 url 中,一般为 GET 请求的参数。
Authorization:认证。当 HTTP 请求目标端设置了访问权限过滤或者请求拦截时需要配置这里。
Headers:请求头信息。传递客户端的一些信息。这里的 Content-Type 与后面 body 的类型相关。
Body:请求体。分表单提交、文件提交、JSON提交等多种方式

form-data:表单提交。相当于 html 的 form 标签中 multipart/form-data。可以上传文件、键值对等
x-www-form-urlencoded:表单提交。相当于 html 中 form 标签中 application/x-www-from-urlencoded。上传表单时会自动转换为键值对提交。
raw:文本提交。可以选择 XML、JSON、TEXT、HTML 等。
binary:二进制文件提交。通常用来上传文件、图片等。

img4

  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HolaSecurity

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值