Jamie Street
Jamie Street

Reputation: 1547

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

Upvotes: 1

Views: 3674

Answers (3)

bichotll
bichotll

Reputation: 469

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

Upvotes: 0

poli_g
poli_g

Reputation: 639

I found this, it provides good extra background (got curious myself): PUT vs POST

Upvotes: 2

Niet the Dark Absol
Niet the Dark Absol

Reputation: 324760

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...

Upvotes: 1

Related Questions