使用json内容类型的PUT请求

时间:2015-01-18 14:58:41

标签: php json put

我有一个基于switch的{​​{1}},$_SERVER['REQUEST_METHOD']案例出现了问题。 阅读PUT的合理方法是使用PUT并使用php://inputfopen阅读。

发送到PUT的数据为file_get_contents

目前,这是我的情况:

Content-type: application/json

最棒的是,我的带有键/值对的cURL请求工作得很好。数据被填满,我的case "PUT": parse_str(file_get_contents("php://input"), $putData); var_dump($putData); if(isset($_GET['id'])){ putData($_GET['id'], $putData); } else { print json_encode(["message" => "Missing parameter `id`."]); http_response_code(400); } break; 处理好一切。 问题是我需要在这种情况下接受JSON,我该怎么办? 我的REST客户端在putData()时抛出一个空数组。

2 个答案:

答案 0 :(得分:2)

尝试使用json_decode而不是parse_str

case "PUT":
        $rawInput = file_get_contents("php://input");
        $putData = json_decode($rawInput);
        if (is_null($putData)) {
            http_response_code(400);
            print json_encode(["message" => "Couldn't decode submission", "invalid_json_input" => $rawInput]);
        } else {
            if(isset($_GET['id'])){
                putData($_GET['id'], $putData);
            } else {
                http_response_code(400);
                print json_encode(["message" => "Missing parameter `id`."]);
            }
        }
        break;

答案 1 :(得分:0)

这里只是猜测一下,但是如果你的REST客户端接受了这个请求的JSON,那么它会在var_dump()上阻塞,它会输出一个不是JSON的字符串,直接回到响应上。尝试删除var_dump()

另外,我非常确定在将任何输出发送到客户端之前必须先调用http_response_code()