2018-12-21 15:55:51 9118次浏览 4条回答 1 悬赏 200 金钱

在使用postman调接口的时候发现使用post方式的时候不管使用form-data和x-www-form-urlencoded的情况,我通过
print_r(\Yii::$app->getRequest()->post());
打印的值都是一样的,详细见图片
QQ截图20181221155207.png

2.png

然后我使用put方式试试看,结果如图
3.png

4. png

网上都说form-data的数据格式就是如下格式

[----------------------------961448793903793318528971
Content-Disposition:_form-data;_name] => "token"

8gumyDwEdEo2fhr6xnL2pGQku_4zTK7W
----------------------------961448793903793318528971--

为什么 post 使用 form-data 就不是这种格式呢??

  • 回答于 2018-12-22 02:46 举报

    content-type 不一样,以及 request body 结构也不一样

    x-www-form-urlencoded 多个字段值用 & 拼接,用于传文本。

    form-data 多个字段值用上面出现的 ----------------------------961448793903793318528971 拼接,会在 content-type 中说明这个随机值,form-data 主要用于传输文件用,会告诉服务器传输文件的 文件名、mimetype 等。

    至于为什么,那是因为一个用于传文件一个用于传文本,传文本还干嘛用这种累赘的方式。

    5 条回复
    回复于 2018-12-22 09:46 回复

    那为什么 post 使用 form-data 打印出来不是 ----------------------------961448793903793318528971

    回复于 2018-12-24 12:58 回复

    你没有仔细我看的我回复,我上面已经说了,这是一个分隔符,用于分隔数据,便于解析,这不是PHP的内容,建议多了解HTTP。你自己用 charlesfidler 工具捕获一下就晓得了。

    回复于 2018-12-24 13:21 回复

    可能是我没有问清楚,我的意思是:form-data 的数据格式是不是都是分隔符的样子?如果是为什么post方法打印出来和put,get打印出来差别这么大?

    回复于 2018-12-24 14:48 回复

    本质都是一样的,为什么 put 打印出来不一样,那是 Yiipost 方法做了处理,如果是 post 那就直接读取 $_POST 如果不是,那就 php://input (读取原始数据不解析),当然,也不仅限于这俩种,看看 Request 类的 getBodyParams 方法就知道了。

    回复于 2018-12-24 16:03 回复

    测试

  • 回答于 2018-12-22 15:41 举报

    这个应该是使用 file_get_contents("php://input")接值吧

  • 回答于 2018-12-23 19:34 举报

    你不要认为post一定是x-www-form-urlencoded。实际上post只是http的一种请求方法而已。至于你的请求行,请求header,请求body都是可以定义的。所以到底是x-www-form-urlencoded还是form-data你完全可以自定义。
    话说回来,通常情况下,普通的表单提交默认都是urlencoded;而如果是文件上传,则必须是form-data。
    至于为啥,其实第一个回答者说到点上了,那就是传输的内容不同。文件(附件)这些属于文件流;urlencoded多半是url编码过的普通键值对文本。
    另外多说一句,post其实除了可以上述两种之外,还有直接传递一个普通的字符串,只要你的content-type设置正确匹配就行。你既然用过postman肯定见到过。
    再多说一句,你发现它们的不同很好,多多练习和发问。然后看看http协议本身的一些东西,一边练习一边思考,你的水平就上来了。思考,编程,思考,编程,思考,编程。。。。。。

  • 回答于 2019-01-01 15:41 举报

    Good。Go on.

    觉得很赞
您需要登录后才可以回答。登录 | 立即注册
xyf90314
副总裁

xyf90314

注册时间:2015-03-04
最后登录:2023-03-13
在线时长:95小时23分
  • 粉丝21
  • 金钱5257
  • 威望40
  • 积分6607

热门问题