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

时间:2014-02-24 17:04:19

标签: php api http rest http-headers

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

目前我使用以下代码:

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

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

如果有任何添加,我会在对API的所有请求中设置以下标题:

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");

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

提前干杯, 杰米

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

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

这在过去给我带来了许多问题!

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

答案 2 :(得分:0)

在PHP上存在一些问题。

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

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

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