Philips Hue API CURL PUT请求返回奇怪的错误


Philips Hue API CURL PUT request returning bizarre error

所以我正在写一个漂亮的小web应用程序,让我可以从任何地方控制我的各种照明系统,它进行得很好。飞利浦Hue API遇到了一点小问题。

我可以使一个PUT请求很好,我得到了大量的数据回来,但我有点困惑的错误,我得到时运行以下代码:

$ch = curl_init();
$body = json_encode(array("on" => true));
// Translates to String '{"on":true}'
$fp = fopen('php://temp/maxmemory:256000', 'w');
fwrite($fp, $body);
fseek($fp, 0);
curl_setopt($ch, CURLOPT_URL, 'https://client-eastwood-dot-hue-prod-us.appspot.com/api/0/lights/1');
curl_setopt($ch, CURLOPT_PUT, true);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
curl_setopt($ch, CURLOPT_INFILE, $fp);
curl_setopt($ch, CURLOPT_INFILESIZE, strlen($body));
curl_setopt($ch, CURLOPT_HTTPHEADER, array
(
    "Content-Type: application/json;charset=UTF-8",
    "X-Token: $Token"
));
curl_exec($ch);
curl_close($ch);

注意这个答案中的文件数据解决方案

错误显示如下:

[{"error":
{
    "type":7,
    "address":"/lights/3/state/on",
    "description":"invalid value,  false }, for parameter, on"
}}]

我知道这是$body内容的语法错误,但我不能让头或尾,究竟是错的。我试过发送true作为一个字符串,并尝试发送1作为一个整数和字符串,但它都回来与相同的错误(取代false为任何发送,显然)。

可以感谢你的帮助:)
欢呼声

哎呀,我知道问题是什么了!

由于某种原因,json_encodetrue, false和数字周围加了引号。固定了一点preg_replace,它的工作原理!: D

$body = preg_replace("/:'"([0-9]+|true|false)'"/", ":$1",
    json_encode(array("on" => true))
);