LIFX 电源开/关的 PHP HTTP CURL PUT 请求

Posted

技术标签:

【中文标题】LIFX 电源开/关的 PHP HTTP CURL PUT 请求【英文标题】:PHP HTTP CURL PUT request for LIFX Power On/Off 【发布时间】:2015-07-28 20:16:12 【问题描述】:

我正在尝试使用 php 打开/关闭我所有的 Lifx 灯泡。

API 文档 http://developer.lifx.com/ 说要使用 PUT 请求:

curl -u "c87c73a896b554367fac61f71dd3656af8d93a525a4e87df5952c6078a89d192:" \
       -X PUT \
       -d "state=on" \
       "https://api.lifx.com/v1beta1/lights/all/power"

现在使用 curl 命令可以在命令行中使用。它会提示我输入密码,除非我在“用户名”中的冒号后面添加密码。

问题是当我尝试像这样将该命令翻译成 PHP 时:

$authToken = 'c87c73a896b554367fac61f71dd3656af8d93a525a4e87df5952c6078a89d192:myFakePassword';
$ch = curl_init('https://api.lifx.com/v1beta1/lights/all/power');
$headers = array("selector=all&state=on",'Authorization: Bearer ' . $authToken);
curl_setopt($ch, CURLOPT_PUT, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$response = curl_exec($ch);

这通过了,但我得到了一个 404 Not Found,Lifx 文档说这可能是一个格式错误的选择器。

注意:我能够使用 PHP 成功调用以通过此 POST 切换电源:

$authToken = 'c87c73a896b554367fac61f71dd3656af8d93a525a4e87df5952c6078a89d192';
$ch = curl_init('https://api.lifx.com/v1beta1/lights/all/toggle');
$headers = array("selector=all",'Authorization: Bearer ' . $authToken);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$response = curl_exec($ch);

但我不想只是切换灯,我希望能够指定打开或关闭。我的 PUT 请求可能有什么问题?

感谢您的任何建议。

【问题讨论】:

【参考方案1】:

通过设置其他一些 curl 选项解决了这个问题:

$ch = curl_init($link);
$headers = array('Authorization: Bearer ' . $authToken);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$data = "state=on";
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$response = curl_exec($ch);

$link 是 https://api.lifx.com/v1beta1/lights/all/power

$authToken 是我的 api 密钥

【讨论】:

以上是关于LIFX 电源开/关的 PHP HTTP CURL PUT 请求的主要内容,如果未能解决你的问题,请参考以下文章

PHP curl 模拟 请求 中我添加 Authorization 认证 但是这个认证内容我接受不到 没有开安全模式 何解?

AsyncTask LIFX 灯泡响应

android怎么来判断蓝牙开、关的状态?求代码

高分请人:帮忙看看哪个端口必要开,哪个要关的

javascript 重构可怕光以采取可选的LIFX选择器

php用curl时,HTTP链接正常,HTTPS时,获取不到数据