关于php:为什么PUT请求需要x-www-form-urlencoded而不能使用form-data?

Why does a PUT request require x-www-form-urlencoded and not work with form-data?

我正在尝试从PUT请求中检索数据。

目前我使用以下代码:

1
parse_str(file_get_contents("php://input"), $parsedArray);

但这似乎只支持x-www-url-encoded,而不是标准的表单数据,是否有我错过的解决方法?

如果是任何添加,我对我的API的所有请求都设置了以下标题:

1
2
3
4
5
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Methods: *");
header("Access-Control-Allow-Methods: OPTIONS, GET, POST, PUT, DELETE");
header("Access-Control-Allow-Headers: Authorization");
header("Content-Type: application/json");

如果需要更多信息我可以提供它,不太确定还有什么可能影响这个?

提前干杯,
杰米


我发现了这个,它提供了很好的额外背景(我自己很好奇):
PUT与POST


这不是特定于PUT - POST遇到同样的问题。

当PHP解析multipart/form-data请求时,php://input不再可用。

这给我带来了很多问题!

不幸的是,唯一的解决方法是将文件的内容作为表单数据的一部分提交,可能是base64编码的(因此它不必对所有二进制数据进行urlencode)。 这是一个麻烦,但遗憾的是,这是处理这种特殊情况的唯一方法......


在PHP上存在一些问题。

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

另一方面,正如他们在那里所说,PUT不是上传文件的正确方法。
这是一个关于在Symfony Framework中解决问题的讨论。

https://github.com/symfony/symfony/pull/10381#issuecomment-36726684