Итак, я пишу милое маленькое веб-приложение, которое позволяет мне контролировать мои различные системы освещения из любой точки мира, и все идет отлично. Просто попробуйте немного поработать с API Philips Hue.
Я могу сделать запрос 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_encode
ставил кавычки true
, false
и цифры. Исправлено с небольшим preg_replace
и это работает! : D
$body = preg_replace("/:\"([0-9]+|true|false)\"/", ":$1",
json_encode(array("on" => true))
);
Других решений пока нет …