问题
使用postman测试接口时发现,请求方式为put的接口,如果使用form_data类型做参数如图1,则$_POST
数组为空。使用 file_get_contents('php://input'
获取的参数为字符串。如图2
原因
POST和PUT请求之间的根本区别体现在
Request-URI的不同含义。POST请求中的URI标识
处理封闭实体的资源。该资源可能是
数据接受过程,通往某些其他协议的网关或单独的实体
接受注释。相反,PUT请求中的URI标识了
请求中包含的实体-用户代理知道要使用的URI
并且服务器不得尝试将请求应用于其他资源。如果
服务器希望将请求应用于其他URI,它必须发送
301(永久移动)响应;然后用户代理可以自己制作
有关是否重定向请求的决定。”
这意味着HTTP RFC不允许我们识别multipart / form-
PUT请求中的数据。
因此,您提议的关于PHP已经如何处理请求的实现将随后
将PHP置于不符合规范的位置。PUT用于
不同于POST的规范,因此修改了PHP以平等对待它们
不会是一个理智的解决方案。
但是,尽管有一些简单的步骤可以完成您想要的
这将违反HTTP规范。
上边是谷歌翻译的
原文链接
解决
1.将form_data方式换成x-www-form-urlencoded
2.没试过如图3