2013-11-30 5 views
0

Я хочу отправить запрос PUT на сервер rails от Arduino.cURL to Arduino translation

это работает в завиток:

curl -X PUT -d "barrel[gallons]=99" 192.168.0.7:3000/barrels/1 

Сервер получает вызов и галлоны атрибут обновляется.

Я не знаю, как отформатировать это сообщение в Arduino.

String request = "PUT /barrels/1.json?barrel[gallons]=99 HTTP/1.0"; 
send_request(request); 
Adafruit_CC3000_Client client = cc3000.connectTCP(ip, port); 
// Send request 
if (client.connected()) { 
    client.println(request);  
    Serial.println("Connected & Data sent"); 
} 

Он успешно соединяется с клиентом, но сообщение не имеет никакого эффекта. Как мне отформатировать запрос?

ответ

0

Если он работает с curl, вы хотите, чтобы Arduino генерировал точно такое же сообщение. Конечно, проблема заключается в том, как узнать, как это должно выглядеть. В таких случаях я обычно использую прокси-сервер отладки для перехвата сообщения. Самый удобный прокси-сервер отладки, который я знаю, - Fiddler2. Однако в вашем простом случае достаточно инструмента вроде netcat или ncat. Другим маршрутом было бы понюхать соединение с wireshark.

Как только вы можете увидеть трафик, как правило, очень просто исправить все подобные проблемы.

+0

Вы также можете прочитать следующее: http://stackoverflow.com/q/3677400/2036917 Просто смените пост. –

0

Примечание Ваш PUT запрос в Curl станет сообщение TCP, как следующее:

PUT /barrels/1 HTTP/1.1 
User-Agent: curl/7.21.7 (i386-pc-win32) libcurl/7.21.7 OpenSSL/0.9.8r zlib/1.2.5 
Host: 192.168.0.7:3000 
Accept: */* 
Content-Length: 18 
Content-Type: application/x-www-form-urlencoded 

barrel[gallons]=99 

Использование Adafruit_CC3000_Client, вы используете клиент TCP, а не клиент HTTP.

Также

/barrels/1.json?barrel[gallons]=99 

больше напоминает GET то PUT запроса. Я действительно использовал бы запрос GET, потому что таким образом я не был бы вынужден предоставить тело сообщения. Итак, я бы попробовал:

String request = "GET /barrels/1?barrel[gallons]=99 HTTP/1.1"; 
//send_request(request); //Why here? 
Adafruit_CC3000_Client client = cc3000.connectTCP(ip, port); 
// Send request 
if (client.connected()) { 
    client.println(request); 
    client.println(); //Empty line to terminate header required. 
    Serial.println("Connected & Data sent"); 
}