使用PHP作为Arduino的“重定向”

时间:2013-03-21 23:58:53

标签: php arduino

我创建了一个Arduino以太网草图,这样在按钮按下时,它会请求一个URL(http://myserver.lan/sensors/garage.php)。我的想法是,然后我可以使用这个PHP脚本来提取一个单独的URL,我可以更新而无需重新刷新Arduino。这个单独的URL驱动某些家庭自动化事件。

我在garage.php中尝试了以下内容:

<?php
    $homepage = file_get_contents('http://myserver.lan/test/');
?>

这适用于我的浏览器,但不适用于Arduino主板。两者的日志如下:

Arduino的:

192.168.2.50 - - [21/Mar/2013:13:43:58 -0400] "GET /sensors/garage.php HTTP/1.1" 400 515 "-" "-"

Safari浏览器:

192.168.2.3 - - [21/Mar/2013:13:43:28 -0400] "GET /test/ HTTP/1.0" 200 2235 "-" "-"
192.168.2.65 - - [21/Mar/2013:13:43:28 -0400] "GET /sensors/garage.php HTTP/1.1" 200 293 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/536.28.10 (KHTML, like Gecko) Version/6.0.3 Safari/536.28.10"

为了完整性,这里是我的Arduino草图的代码示例:

EthernetClient client;
if (client.connect(rackserver, 80)) {
    client.println("GET /sensors/garage.php HTTP/1.1");
}
client.stop();

如何修复PHP脚本?我希望在不重新刷新我的Arduino的情况下实现这一目标。

1 个答案:

答案 0 :(得分:1)

注意Arduino请求的日志如何显示服务器响应的响应代码为400(错误请求)。您的Arduino代码未发送有效的HTTP请求,原因有两个:

  1. 有效的HTTP请求以空行终止。
  2. 您指定了HTTP版本1.1,该版本要求请求包含Host:标头。
  3. 请改为尝试:

    EthernetClient client;
    if (client.connect(rackserver, 80)) {
      client.println("GET /sensors/garage.php HTTP/1.0");
      client.println();
    }
    client.stop();