cURL连接被拒绝

时间:2017-06-14 21:17:14

标签: php curl philips-hue

我正试图通过以下代码简单地阅读家中的飞利浦Hue灯信息:

$fp = fopen(dirname(__FILE__).'/errorlog.txt', 'a');

$ch = curl_init();
curl_setopt_array($ch, array(
    CURLOPT_RETURNTRANSFER => 1,
    CURLOPT_URL => 'http://119.119.20.20:2827/api/Js82jH2lao-pAiws89S9A-k9hHsukw72/lights',
    CURLOPT_VERBOSE => true,
    CURLOPT_STDERR => $fp
));
$resp = curl_exec($ch);
curl_close($ch);
print_r($resp);

它什么都不返回。看一下errorlog.txt,它说:

* About to connect() to 119.119.20.20 port 2827 (#0)
*   Trying 119.119.20.20... * Connection refused
* couldn't connect to host
* Closing connection #0

我能够通过像hurl.it这样的网站读取数据并更改灯光设置,告诉我我已经正确设置了路由器。我服务器上的allow_url_fopen已启用。我正在使用curl,因为我也想做一个PUT请求。我不想用图书馆来打开和关灯。

我该如何做到这一点?

编辑澄清:我正在使用外部服务器来托管php,它与家里的飞利浦Hue桥通信。您可以假设我正确转发了我的端口。没有VPN。

1 个答案:

答案 0 :(得分:1)

我的猜测是用户/权限问题。

www-data / http用户是否有权在您的服务器上使用curl?所有php脚本都将以该用户身份执行,因此没有正确的权限curl将无法发出此错误。

哪位用户创建了php脚本?您是否更改了文件权限以允许其他用户更正权限?

说了这么多,你说你不想使用图书馆这么简单,为什么还要打扰卷曲呢? file_get_contents可以开箱即用PUT,POST等。

从桥接获取状态为关联数组:

$result = json_decode(file_get_contents('http://119.119.20.20:2827/api/Js82jH2lao-pAiws89S9A-k9hHsukw72/lights'), true);

使用PUT请求关闭所有灯光:

$data = '{"on":false}';
$result = file_get_contents('http://119.119.20.20:2827/api/Js82jH2lao-pAiws89S9A-k9hHsukw72/groups/0/action', null, stream_context_create(array(
'http' => array(
'method' => 'PUT',
'header' => 'Content-Type: application/json' . "\r\n"
. 'Content-Length: ' . strlen($data) . "\r\n",
'content' => $data
),
)));

刚刚在我的Hue设置上尝试过。适合我。