内容类型为 json 的 PUT 请求
PUT request with json content-type
我有一个基于 $_SERVER['REQUEST_METHOD']
的 switch
,PUT
的情况出了点问题。
阅读 PUT
的合理方法是使用 php://input
并使用 fopen
或 file_get_contents
.
阅读它
发送到 PUT 的数据属于 Content-type: application/json
目前我得到的情况是这样的:
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;
很棒的是我的 key/value 对 cURL 请求工作得很好。数据已填满,我的 putData()
处理一切都很好。
问题是在这种情况下我需要接受JSON,我该怎么办?
当我 var_dump($putData)
.
时,我的 REST 客户端抛出一个空数组
只是猜测,但如果您的 REST 客户端接受 JSON 这个请求,它会阻塞 var_dump()
输出一个不是 JSON 的字符串回复。尝试删除 var_dump()
此外,我很确定您必须先调用 http_response_code()
才能将任何输出发送到客户端。
尝试使用 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;
我有一个基于 $_SERVER['REQUEST_METHOD']
的 switch
,PUT
的情况出了点问题。
阅读 PUT
的合理方法是使用 php://input
并使用 fopen
或 file_get_contents
.
发送到 PUT 的数据属于 Content-type: application/json
目前我得到的情况是这样的:
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;
很棒的是我的 key/value 对 cURL 请求工作得很好。数据已填满,我的 putData()
处理一切都很好。
问题是在这种情况下我需要接受JSON,我该怎么办?
当我 var_dump($putData)
.
只是猜测,但如果您的 REST 客户端接受 JSON 这个请求,它会阻塞 var_dump()
输出一个不是 JSON 的字符串回复。尝试删除 var_dump()
此外,我很确定您必须先调用 http_response_code()
才能将任何输出发送到客户端。
尝试使用 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;