php 不解析put请求中form_data类型的数据

问题

使用postman测试接口时发现,请求方式为put的接口,如果使用form_data类型做参数如图1,则$_POST 数组为空。使用 file_get_contents('php://input' 获取的参数为字符串。如图2

图1

图2

原因


POST和PUT请求之间的根本区别体现在
Request-URI的不同含义。POST请求中的URI标识
处理封闭实体的资源。该资源可能是
数据接受过程,通往某些其他协议的网关或单独的实体
接受注释。相反,PUT请求中的URI标识了
请求中包含的实体-用户代理知道要使用的URI
并且服务器不得尝试将请求应用于其他资源。如果
服务器希望将请求应用于其他URI,它必须发送
301(永久移动)响应;然后用户代理可以自己制作
有关是否重定向请求的决定。”

这意味着HTTP RFC不允许我们识别multipart / form-
PUT请求中的数据。

因此,您提议的关于PHP已经如何处理请求的实现将随后
将PHP置于不符合规范的位置。PUT用于
不同于POST的规范,因此修改了PHP以平等对待它们
不会是一个理智的解决方案。

但是,尽管有一些简单的步骤可以完成您想要的
这将违反HTTP规范。


上边是谷歌翻译的

原文链接

https://bugs.php.net/bug.php?id=55815

解决

1.将form_data方式换成x-www-form-urlencoded
2.没试过如图3

图3

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容