2013-03-21 112 views
0

我已經創建了一個Arduino以太網草圖,在按鈕按下時,它會請求一個URL(http://myserver.lan/sensors/garage.php)。我的想法是,我可以使用這個PHP腳本來拉一個單獨的URL,我可以更新而無需重新刷新Arduino。這個單獨的URL驅動某些家庭自動化事件。使用PHP作爲Arduino的「重定向」

我試着在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

請注意,Arduino請求的日誌顯示服務器響應的響應代碼爲400(錯誤請求)。您的Arduino代碼未發送有效的HTTP請求,原因有兩個:

  1. 有效的HTTP請求以空行結束。
  2. 您指定了HTTP版本1.1,它要求請求包含Host:標頭。

試試這個:

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

謝謝...該訣竅。 – user142512 2013-03-24 00:42:55