简体   繁体   中英

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

I'm trying to retrieve the data from a PUT request.

Currently I have it working with the below code:

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

But this seems to only be supported with x-www-url-encoded and not the standard form-data, is there a work around that I've missed?

If it's any addition I have the following headers set on all requests to my 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");

If more info is needed i can provide it, not too sure what else could be effecting this?

Cheers in advance, Jamie

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

This is not specific to PUT - POST suffers the same problem.

When PHP parses a multipart/form-data request, php://input is no longer available.

This has caused many problems for me in the past!

Unfortunately the only workaround is to have the file's contents be submitted as part of the form-data, possibly base64-encoded (so it doesn't have to urlencode all the binary data). It's a hassle, but sadly that's the only way to handle this particular situation...

There is some issue about it on PHP.

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

On the other hand, as they say over there, PUT is not the proper way to upload a file. It is a discussion about to solve the problem in Symfony Framework or not.

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM